@fluidframework/routerlicious-urlresolver 1.4.0-115997 → 2.0.0-dev-rc.1.0.0.224419

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.
Files changed (55) hide show
  1. package/.eslintrc.js +29 -32
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +117 -0
  4. package/README.md +37 -1
  5. package/api-extractor-lint.json +4 -0
  6. package/api-extractor.json +4 -0
  7. package/api-report/routerlicious-urlresolver.api.md +47 -0
  8. package/dist/index.cjs +10 -0
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/routerlicious-urlresolver-alpha.d.ts +13 -0
  13. package/dist/routerlicious-urlresolver-beta.d.ts +17 -0
  14. package/dist/routerlicious-urlresolver-public.d.ts +17 -0
  15. package/dist/routerlicious-urlresolver-untrimmed.d.ts +44 -0
  16. package/dist/tsdoc-metadata.json +11 -0
  17. package/dist/{urlResolver.js → urlResolver.cjs} +20 -15
  18. package/dist/urlResolver.cjs.map +1 -0
  19. package/dist/urlResolver.d.ts +9 -0
  20. package/dist/urlResolver.d.ts.map +1 -1
  21. package/lib/index.d.mts +6 -0
  22. package/lib/index.d.mts.map +1 -0
  23. package/lib/{index.js → index.mjs} +2 -2
  24. package/lib/index.mjs.map +1 -0
  25. package/lib/routerlicious-urlresolver-alpha.d.mts +13 -0
  26. package/lib/routerlicious-urlresolver-beta.d.mts +17 -0
  27. package/lib/routerlicious-urlresolver-public.d.mts +17 -0
  28. package/lib/routerlicious-urlresolver-untrimmed.d.mts +44 -0
  29. package/lib/{urlResolver.d.ts → urlResolver.d.mts} +9 -0
  30. package/lib/urlResolver.d.mts.map +1 -0
  31. package/lib/{urlResolver.js → urlResolver.mjs} +17 -12
  32. package/lib/urlResolver.mjs.map +1 -0
  33. package/package.json +83 -47
  34. package/{lib/index.d.ts → prettier.config.cjs} +4 -2
  35. package/src/index.ts +1 -1
  36. package/src/urlResolver.ts +158 -143
  37. package/tsc-multi.test.json +4 -0
  38. package/tsconfig.json +12 -16
  39. package/dist/index.js +0 -18
  40. package/dist/index.js.map +0 -1
  41. package/dist/packageVersion.d.ts +0 -9
  42. package/dist/packageVersion.d.ts.map +0 -1
  43. package/dist/packageVersion.js +0 -12
  44. package/dist/packageVersion.js.map +0 -1
  45. package/dist/urlResolver.js.map +0 -1
  46. package/lib/index.d.ts.map +0 -1
  47. package/lib/index.js.map +0 -1
  48. package/lib/packageVersion.d.ts +0 -9
  49. package/lib/packageVersion.d.ts.map +0 -1
  50. package/lib/packageVersion.js +0 -9
  51. package/lib/packageVersion.js.map +0 -1
  52. package/lib/urlResolver.d.ts.map +0 -1
  53. package/lib/urlResolver.js.map +0 -1
  54. package/src/packageVersion.ts +0 -9
  55. package/tsconfig.esnext.json +0 -7
@@ -4,160 +4,175 @@
4
4
  */
5
5
 
6
6
  import { parse } from "url";
7
- import { assert } from "@fluidframework/common-utils";
8
- import {
9
- IRequest,
10
- } from "@fluidframework/core-interfaces";
11
- import {
12
- IFluidResolvedUrl,
13
- IResolvedUrl,
14
- IUrlResolver,
15
- } from "@fluidframework/driver-definitions";
7
+ import { assert } from "@fluidframework/core-utils";
8
+ import { IRequest } from "@fluidframework/core-interfaces";
9
+ import { IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions";
16
10
  import { IUser } from "@fluidframework/protocol-definitions";
17
11
  import { Provider } from "nconf";
18
12
 
19
13
  const r11sServers = [
20
- "www.wu2-ppe.prague.office-int.com",
21
- "www.wu2.prague.office-int.com",
22
- "www.eu.prague.office-int.com",
14
+ "www.wu2-ppe.prague.office-int.com",
15
+ "www.wu2.prague.office-int.com",
16
+ "www.eu.prague.office-int.com",
23
17
  ];
24
18
 
19
+ /**
20
+ * @internal
21
+ */
25
22
  export class RouterliciousUrlResolver implements IUrlResolver {
26
- constructor(
27
- private readonly config: { provider: Provider; tenantId: string; documentId: string; } | undefined,
28
- private readonly getToken: () => Promise<string>,
29
- private readonly hostUrl: string) {
30
- }
31
-
32
- /**
33
- * Handles a request and returns the relevant endpoints for the environment
34
- */
35
- public async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {
36
- let requestedUrl = request.url;
37
-
38
- // If we know the original hostname, reinsert it
39
- if (this.config && request.url.startsWith("/")) {
40
- requestedUrl = `http://dummy:3000${request.url}`;
41
- }
42
-
43
- const reqUrl = new URL(requestedUrl);
44
- const server = reqUrl.hostname.toLowerCase();
45
-
46
- // If we don't have a valid server or a prescriptive config, we cannot resolve the URL
47
- if (!(r11sServers.includes(server) || (server === "localhost" && reqUrl.port === "3000") || this.config)) {
48
- return undefined;
49
- }
50
-
51
- const path = reqUrl.pathname.split("/");
52
- let tenantId: string;
53
- let documentId: string;
54
- let provider: Provider | undefined;
55
- if (this.config) {
56
- tenantId = this.config.tenantId;
57
- documentId = this.config.documentId;
58
- provider = this.config.provider;
59
- } else if (path.length >= 4) {
60
- tenantId = path[2];
61
- documentId = path[3];
62
- } else {
63
- tenantId = "fluid";
64
- documentId = path[2];
65
- }
66
-
67
- const token = await this.getToken();
68
-
69
- const isLocalHost = server === "localhost";
70
- const isInternalRequest = server.includes("gateway"); // e.g. gateway:3000 || fierce-dog-gateway:3000
71
-
72
- const serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);
73
-
74
- let fluidUrl = "fluid://" +
75
- `${this.config ? parse(this.config.provider.get("worker:serverUrl")).host : serverSuffix}/` +
76
- `${encodeURIComponent(tenantId)}/` +
77
- `${encodeURIComponent(documentId)}`;
78
-
79
- // In case of any additional parameters add them back to the url
80
- if (reqUrl.search) {
81
- const searchParams = reqUrl.search;
82
- if (searchParams) {
83
- fluidUrl += searchParams;
84
- }
85
- }
86
-
87
- let storageUrl = "";
88
- let ordererUrl = "";
89
- let deltaStorageUrl = "";
90
-
91
- // There is no provider when using debugging tooling
92
- if (provider && isInternalRequest) {
93
- storageUrl = provider.get("worker:internalBlobStorageUrl");
94
- ordererUrl = provider.get("worker:alfredUrl");
95
- deltaStorageUrl =
96
- // eslint-disable-next-line max-len
97
- `${provider.get("worker:alfredUrl")}/deltas/${encodeURIComponent(tenantId)}/${encodeURIComponent(documentId)}`;
98
- } else if (provider) {
99
- storageUrl = provider.get("worker:blobStorageUrl").replace("historian:3000", "localhost:3001");
100
- ordererUrl = provider.get("worker:serverUrl");
101
- deltaStorageUrl =
102
- `${ordererUrl}/deltas/${encodeURIComponent(tenantId)}/${encodeURIComponent(documentId)}`;
103
- } else if (isLocalHost) {
104
- storageUrl = `http://localhost:3001`;
105
- ordererUrl = `http://localhost:3003`;
106
- deltaStorageUrl = `http://localhost:3003/deltas/${tenantId}/${documentId}`;
107
- } else {
108
- storageUrl = `https://historian.${serverSuffix}`;
109
- ordererUrl = `https://alfred.${serverSuffix}`;
110
- deltaStorageUrl = `https://alfred.${serverSuffix}/deltas/${tenantId}/${documentId}`;
111
- }
112
-
113
- storageUrl += `/repos/${tenantId}`;
114
- ordererUrl += ``;
115
- deltaStorageUrl += ``;
116
-
117
- const resolved: IFluidResolvedUrl = {
118
- endpoints: {
119
- storageUrl,
120
- deltaStorageUrl,
121
- ordererUrl,
122
- },
123
- id: documentId,
124
- tokens: { jwt: token },
125
- type: "fluid",
126
- url: fluidUrl,
127
- };
128
- return resolved;
129
- }
130
-
131
- public async getAbsoluteUrl(
132
- resolvedUrl: IResolvedUrl,
133
- relativeUrl: string,
134
- ): Promise<string> {
135
- const fluidResolvedUrl = resolvedUrl as IFluidResolvedUrl;
136
-
137
- const parsedUrl = parse(fluidResolvedUrl.url);
138
- assert(!!parsedUrl.pathname, 0x0b9 /* "PathName should exist" */);
139
- const [, tenantId, documentId] = parsedUrl.pathname.split("/");
140
- assert(!!tenantId, 0x0ba /* "Tenant id should exist" */);
141
- assert(!!documentId, 0x0bb /* "Document id should exist" */);
142
-
143
- let url = relativeUrl;
144
- if (url.startsWith("/")) {
145
- url = url.substr(1);
146
- }
147
-
148
- return `${this.hostUrl}/${encodeURIComponent(
149
- tenantId)}/${encodeURIComponent(documentId)}/${url}`;
150
- }
23
+ constructor(
24
+ private readonly config:
25
+ | { provider: Provider; tenantId: string; documentId: string }
26
+ | undefined,
27
+ private readonly getToken: () => Promise<string>,
28
+ private readonly hostUrl: string,
29
+ ) {}
30
+
31
+ /**
32
+ * Handles a request and returns the relevant endpoints for the environment
33
+ */
34
+ public async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {
35
+ let requestedUrl = request.url;
36
+
37
+ // If we know the original hostname, reinsert it
38
+ if (this.config && request.url.startsWith("/")) {
39
+ requestedUrl = `http://dummy:3000${request.url}`;
40
+ }
41
+
42
+ const reqUrl = new URL(requestedUrl);
43
+ const server = reqUrl.hostname.toLowerCase();
44
+
45
+ // If we don't have a valid server or a prescriptive config, we cannot resolve the URL
46
+ if (
47
+ !(
48
+ r11sServers.includes(server) ||
49
+ (server === "localhost" && reqUrl.port === "3000") ||
50
+ this.config
51
+ )
52
+ ) {
53
+ return undefined;
54
+ }
55
+
56
+ const path = reqUrl.pathname.split("/");
57
+ let tenantId: string;
58
+ let documentId: string;
59
+ let provider: Provider | undefined;
60
+ if (this.config) {
61
+ tenantId = this.config.tenantId;
62
+ documentId = this.config.documentId;
63
+ provider = this.config.provider;
64
+ } else if (path.length >= 4) {
65
+ tenantId = path[2];
66
+ documentId = path[3];
67
+ } else {
68
+ tenantId = "fluid";
69
+ documentId = path[2];
70
+ }
71
+
72
+ const token = await this.getToken();
73
+
74
+ const isLocalHost = server === "localhost";
75
+ const isInternalRequest = server.includes("gateway"); // e.g. gateway:3000 || fierce-dog-gateway:3000
76
+
77
+ const serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);
78
+
79
+ let fluidUrl =
80
+ "fluid://" +
81
+ `${
82
+ this.config
83
+ ? parse(this.config.provider.get("worker:serverUrl")).host
84
+ : serverSuffix
85
+ }/` +
86
+ `${encodeURIComponent(tenantId)}/` +
87
+ `${encodeURIComponent(documentId)}`;
88
+
89
+ // In case of any additional parameters add them back to the url
90
+ if (reqUrl.search) {
91
+ const searchParams = reqUrl.search;
92
+ if (searchParams) {
93
+ fluidUrl += searchParams;
94
+ }
95
+ }
96
+
97
+ let storageUrl = "";
98
+ let ordererUrl = "";
99
+ let deltaStorageUrl = "";
100
+
101
+ // There is no provider when using debugging tooling
102
+ if (provider && isInternalRequest) {
103
+ storageUrl = provider.get("worker:internalBlobStorageUrl");
104
+ ordererUrl = provider.get("worker:alfredUrl");
105
+ deltaStorageUrl = `${provider.get("worker:alfredUrl")}/deltas/${encodeURIComponent(
106
+ tenantId,
107
+ )}/${encodeURIComponent(documentId)}`;
108
+ } else if (provider) {
109
+ storageUrl = provider
110
+ .get("worker:blobStorageUrl")
111
+ .replace("historian:3000", "localhost:3001");
112
+ ordererUrl = provider.get("worker:serverUrl");
113
+ deltaStorageUrl = `${ordererUrl}/deltas/${encodeURIComponent(
114
+ tenantId,
115
+ )}/${encodeURIComponent(documentId)}`;
116
+ } else if (isLocalHost) {
117
+ storageUrl = `http://localhost:3001`;
118
+ ordererUrl = `http://localhost:3003`;
119
+ deltaStorageUrl = `http://localhost:3003/deltas/${tenantId}/${documentId}`;
120
+ } else {
121
+ storageUrl = `https://historian.${serverSuffix}`;
122
+ ordererUrl = `https://alfred.${serverSuffix}`;
123
+ deltaStorageUrl = `https://alfred.${serverSuffix}/deltas/${tenantId}/${documentId}`;
124
+ }
125
+
126
+ storageUrl += `/repos/${tenantId}`;
127
+ ordererUrl += ``;
128
+ deltaStorageUrl += ``;
129
+
130
+ const resolved: IResolvedUrl = {
131
+ endpoints: {
132
+ storageUrl,
133
+ deltaStorageUrl,
134
+ ordererUrl,
135
+ },
136
+ id: documentId,
137
+ tokens: { jwt: token },
138
+ type: "fluid",
139
+ url: fluidUrl,
140
+ };
141
+ return resolved;
142
+ }
143
+
144
+ public async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {
145
+ const parsedUrl = parse(resolvedUrl.url);
146
+ assert(!!parsedUrl.pathname, 0x0b9 /* "PathName should exist" */);
147
+ const [, tenantId, documentId] = parsedUrl.pathname.split("/");
148
+ assert(!!tenantId, 0x0ba /* "Tenant id should exist" */);
149
+ assert(!!documentId, 0x0bb /* "Document id should exist" */);
150
+
151
+ let url = relativeUrl;
152
+ if (url.startsWith("/")) {
153
+ url = url.substr(1);
154
+ }
155
+
156
+ return `${this.hostUrl}/${encodeURIComponent(tenantId)}/${encodeURIComponent(
157
+ documentId,
158
+ )}/${url}`;
159
+ }
151
160
  }
152
161
 
162
+ /**
163
+ * @internal
164
+ */
153
165
  export interface IAlfredUser extends IUser {
154
- displayName: string;
155
- name: string;
166
+ displayName: string;
167
+ name: string;
156
168
  }
157
169
 
170
+ /**
171
+ * @internal
172
+ */
158
173
  export interface IConfig {
159
- serverUrl: string;
160
- blobStorageUrl: string;
161
- tenantId: string;
162
- documentId: string;
174
+ serverUrl: string;
175
+ blobStorageUrl: string;
176
+ tenantId: string;
177
+ documentId: string;
163
178
  }
@@ -0,0 +1,4 @@
1
+ {
2
+ "targets": [{ "extname": ".cjs", "module": "CommonJS", "moduleResolution": "Node10" }],
3
+ "projects": ["./tsconfig.json", "./src/test/tsconfig.json"]
4
+ }
package/tsconfig.json CHANGED
@@ -1,17 +1,13 @@
1
1
  {
2
- "extends": "@fluidframework/build-common/ts-common-config.json",
3
- "exclude": [
4
- "src/test/**/*"
5
- ],
6
- "compilerOptions": {
7
- "rootDir": "./src",
8
- "outDir": "./dist",
9
- "composite": true,
10
- "types": [
11
- "node"
12
- ]
13
- },
14
- "include": [
15
- "src/**/*"
16
- ]
17
- }
2
+ "extends": [
3
+ "../../../common/build/build-common/tsconfig.base.json",
4
+ "../../../common/build/build-common/tsconfig.cjs.json",
5
+ ],
6
+ "include": ["src/**/*"],
7
+ "exclude": ["src/test/**/*"],
8
+ "compilerOptions": {
9
+ "rootDir": "./src",
10
+ "outDir": "./dist",
11
+ "types": ["node"],
12
+ },
13
+ }
package/dist/index.js DELETED
@@ -1,18 +0,0 @@
1
- "use strict";
2
- /*!
3
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
- * Licensed under the MIT License.
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./urlResolver"), exports);
18
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,gDAA8B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport * from \"./urlResolver\";\n"]}
@@ -1,9 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- *
5
- * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
- */
7
- export declare const pkgName = "@fluidframework/routerlicious-urlresolver";
8
- export declare const pkgVersion = "1.4.0-115997";
9
- //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,8CAA8C,CAAC;AACnE,eAAO,MAAM,UAAU,iBAAiB,CAAC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- /*!
3
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
- * Licensed under the MIT License.
5
- *
6
- * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.pkgVersion = exports.pkgName = void 0;
10
- exports.pkgName = "@fluidframework/routerlicious-urlresolver";
11
- exports.pkgVersion = "1.4.0-115997";
12
- //# sourceMappingURL=packageVersion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,2CAA2C,CAAC;AACtD,QAAA,UAAU,GAAG,cAAc,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-urlresolver\";\nexport const pkgVersion = \"1.4.0-115997\";\n"]}
@@ -1 +0,0 @@
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 { parse } from \"url\";\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n IRequest,\n} from \"@fluidframework/core-interfaces\";\nimport {\n IFluidResolvedUrl,\n IResolvedUrl,\n IUrlResolver,\n} from \"@fluidframework/driver-definitions\";\nimport { IUser } from \"@fluidframework/protocol-definitions\";\nimport { Provider } from \"nconf\";\n\nconst r11sServers = [\n \"www.wu2-ppe.prague.office-int.com\",\n \"www.wu2.prague.office-int.com\",\n \"www.eu.prague.office-int.com\",\n];\n\nexport class RouterliciousUrlResolver implements IUrlResolver {\n constructor(\n private readonly config: { provider: Provider; tenantId: string; documentId: string; } | undefined,\n private readonly getToken: () => Promise<string>,\n private readonly hostUrl: string) {\n }\n\n /**\n * Handles a request and returns the relevant endpoints for the environment\n */\n public async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n let requestedUrl = request.url;\n\n // If we know the original hostname, reinsert it\n if (this.config && request.url.startsWith(\"/\")) {\n requestedUrl = `http://dummy:3000${request.url}`;\n }\n\n const reqUrl = new URL(requestedUrl);\n const server = reqUrl.hostname.toLowerCase();\n\n // If we don't have a valid server or a prescriptive config, we cannot resolve the URL\n if (!(r11sServers.includes(server) || (server === \"localhost\" && reqUrl.port === \"3000\") || this.config)) {\n return undefined;\n }\n\n const path = reqUrl.pathname.split(\"/\");\n let tenantId: string;\n let documentId: string;\n let provider: Provider | undefined;\n if (this.config) {\n tenantId = this.config.tenantId;\n documentId = this.config.documentId;\n provider = this.config.provider;\n } else if (path.length >= 4) {\n tenantId = path[2];\n documentId = path[3];\n } else {\n tenantId = \"fluid\";\n documentId = path[2];\n }\n\n const token = await this.getToken();\n\n const isLocalHost = server === \"localhost\";\n const isInternalRequest = server.includes(\"gateway\"); // e.g. gateway:3000 || fierce-dog-gateway:3000\n\n const serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);\n\n let fluidUrl = \"fluid://\" +\n `${this.config ? parse(this.config.provider.get(\"worker:serverUrl\")).host : serverSuffix}/` +\n `${encodeURIComponent(tenantId)}/` +\n `${encodeURIComponent(documentId)}`;\n\n // In case of any additional parameters add them back to the url\n if (reqUrl.search) {\n const searchParams = reqUrl.search;\n if (searchParams) {\n fluidUrl += searchParams;\n }\n }\n\n let storageUrl = \"\";\n let ordererUrl = \"\";\n let deltaStorageUrl = \"\";\n\n // There is no provider when using debugging tooling\n if (provider && isInternalRequest) {\n storageUrl = provider.get(\"worker:internalBlobStorageUrl\");\n ordererUrl = provider.get(\"worker:alfredUrl\");\n deltaStorageUrl =\n // eslint-disable-next-line max-len\n `${provider.get(\"worker:alfredUrl\")}/deltas/${encodeURIComponent(tenantId)}/${encodeURIComponent(documentId)}`;\n } else if (provider) {\n storageUrl = provider.get(\"worker:blobStorageUrl\").replace(\"historian:3000\", \"localhost:3001\");\n ordererUrl = provider.get(\"worker:serverUrl\");\n deltaStorageUrl =\n `${ordererUrl}/deltas/${encodeURIComponent(tenantId)}/${encodeURIComponent(documentId)}`;\n } else if (isLocalHost) {\n storageUrl = `http://localhost:3001`;\n ordererUrl = `http://localhost:3003`;\n deltaStorageUrl = `http://localhost:3003/deltas/${tenantId}/${documentId}`;\n } else {\n storageUrl = `https://historian.${serverSuffix}`;\n ordererUrl = `https://alfred.${serverSuffix}`;\n deltaStorageUrl = `https://alfred.${serverSuffix}/deltas/${tenantId}/${documentId}`;\n }\n\n storageUrl += `/repos/${tenantId}`;\n ordererUrl += ``;\n deltaStorageUrl += ``;\n\n const resolved: IFluidResolvedUrl = {\n endpoints: {\n storageUrl,\n deltaStorageUrl,\n ordererUrl,\n },\n id: documentId,\n tokens: { jwt: token },\n type: \"fluid\",\n url: fluidUrl,\n };\n return resolved;\n }\n\n public async getAbsoluteUrl(\n resolvedUrl: IResolvedUrl,\n relativeUrl: string,\n ): Promise<string> {\n const fluidResolvedUrl = resolvedUrl as IFluidResolvedUrl;\n\n const parsedUrl = parse(fluidResolvedUrl.url);\n assert(!!parsedUrl.pathname, 0x0b9 /* \"PathName should exist\" */);\n const [, tenantId, documentId] = parsedUrl.pathname.split(\"/\");\n assert(!!tenantId, 0x0ba /* \"Tenant id should exist\" */);\n assert(!!documentId, 0x0bb /* \"Document id should exist\" */);\n\n let url = relativeUrl;\n if (url.startsWith(\"/\")) {\n url = url.substr(1);\n }\n\n return `${this.hostUrl}/${encodeURIComponent(\n tenantId)}/${encodeURIComponent(documentId)}/${url}`;\n }\n}\n\nexport interface IAlfredUser extends IUser {\n displayName: string;\n name: string;\n}\n\nexport interface IConfig {\n serverUrl: string;\n blobStorageUrl: string;\n tenantId: string;\n documentId: string;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,eAAe,CAAC"}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport * from \"./urlResolver\";\n"]}
@@ -1,9 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- *
5
- * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
- */
7
- export declare const pkgName = "@fluidframework/routerlicious-urlresolver";
8
- export declare const pkgVersion = "1.4.0-115997";
9
- //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,8CAA8C,CAAC;AACnE,eAAO,MAAM,UAAU,iBAAiB,CAAC"}
@@ -1,9 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- *
5
- * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
- */
7
- export const pkgName = "@fluidframework/routerlicious-urlresolver";
8
- export const pkgVersion = "1.4.0-115997";
9
- //# sourceMappingURL=packageVersion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,2CAA2C,CAAC;AACnE,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,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-urlresolver\";\nexport const pkgVersion = \"1.4.0-115997\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,QAAQ,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEH,YAAY,EACZ,YAAY,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQjC,qBAAa,wBAAyB,YAAW,YAAY;IAErD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,MAAM,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;KAAE,GAAG,SAAS,EACjF,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,MAAM;IAGpC;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAgG7D,cAAc,CACvB,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC;CAiBrB;AAED,MAAM,WAAW,WAAY,SAAQ,KAAK;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB"}
@@ -1 +0,0 @@
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 { parse } from \"url\";\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n IRequest,\n} from \"@fluidframework/core-interfaces\";\nimport {\n IFluidResolvedUrl,\n IResolvedUrl,\n IUrlResolver,\n} from \"@fluidframework/driver-definitions\";\nimport { IUser } from \"@fluidframework/protocol-definitions\";\nimport { Provider } from \"nconf\";\n\nconst r11sServers = [\n \"www.wu2-ppe.prague.office-int.com\",\n \"www.wu2.prague.office-int.com\",\n \"www.eu.prague.office-int.com\",\n];\n\nexport class RouterliciousUrlResolver implements IUrlResolver {\n constructor(\n private readonly config: { provider: Provider; tenantId: string; documentId: string; } | undefined,\n private readonly getToken: () => Promise<string>,\n private readonly hostUrl: string) {\n }\n\n /**\n * Handles a request and returns the relevant endpoints for the environment\n */\n public async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n let requestedUrl = request.url;\n\n // If we know the original hostname, reinsert it\n if (this.config && request.url.startsWith(\"/\")) {\n requestedUrl = `http://dummy:3000${request.url}`;\n }\n\n const reqUrl = new URL(requestedUrl);\n const server = reqUrl.hostname.toLowerCase();\n\n // If we don't have a valid server or a prescriptive config, we cannot resolve the URL\n if (!(r11sServers.includes(server) || (server === \"localhost\" && reqUrl.port === \"3000\") || this.config)) {\n return undefined;\n }\n\n const path = reqUrl.pathname.split(\"/\");\n let tenantId: string;\n let documentId: string;\n let provider: Provider | undefined;\n if (this.config) {\n tenantId = this.config.tenantId;\n documentId = this.config.documentId;\n provider = this.config.provider;\n } else if (path.length >= 4) {\n tenantId = path[2];\n documentId = path[3];\n } else {\n tenantId = \"fluid\";\n documentId = path[2];\n }\n\n const token = await this.getToken();\n\n const isLocalHost = server === \"localhost\";\n const isInternalRequest = server.includes(\"gateway\"); // e.g. gateway:3000 || fierce-dog-gateway:3000\n\n const serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);\n\n let fluidUrl = \"fluid://\" +\n `${this.config ? parse(this.config.provider.get(\"worker:serverUrl\")).host : serverSuffix}/` +\n `${encodeURIComponent(tenantId)}/` +\n `${encodeURIComponent(documentId)}`;\n\n // In case of any additional parameters add them back to the url\n if (reqUrl.search) {\n const searchParams = reqUrl.search;\n if (searchParams) {\n fluidUrl += searchParams;\n }\n }\n\n let storageUrl = \"\";\n let ordererUrl = \"\";\n let deltaStorageUrl = \"\";\n\n // There is no provider when using debugging tooling\n if (provider && isInternalRequest) {\n storageUrl = provider.get(\"worker:internalBlobStorageUrl\");\n ordererUrl = provider.get(\"worker:alfredUrl\");\n deltaStorageUrl =\n // eslint-disable-next-line max-len\n `${provider.get(\"worker:alfredUrl\")}/deltas/${encodeURIComponent(tenantId)}/${encodeURIComponent(documentId)}`;\n } else if (provider) {\n storageUrl = provider.get(\"worker:blobStorageUrl\").replace(\"historian:3000\", \"localhost:3001\");\n ordererUrl = provider.get(\"worker:serverUrl\");\n deltaStorageUrl =\n `${ordererUrl}/deltas/${encodeURIComponent(tenantId)}/${encodeURIComponent(documentId)}`;\n } else if (isLocalHost) {\n storageUrl = `http://localhost:3001`;\n ordererUrl = `http://localhost:3003`;\n deltaStorageUrl = `http://localhost:3003/deltas/${tenantId}/${documentId}`;\n } else {\n storageUrl = `https://historian.${serverSuffix}`;\n ordererUrl = `https://alfred.${serverSuffix}`;\n deltaStorageUrl = `https://alfred.${serverSuffix}/deltas/${tenantId}/${documentId}`;\n }\n\n storageUrl += `/repos/${tenantId}`;\n ordererUrl += ``;\n deltaStorageUrl += ``;\n\n const resolved: IFluidResolvedUrl = {\n endpoints: {\n storageUrl,\n deltaStorageUrl,\n ordererUrl,\n },\n id: documentId,\n tokens: { jwt: token },\n type: \"fluid\",\n url: fluidUrl,\n };\n return resolved;\n }\n\n public async getAbsoluteUrl(\n resolvedUrl: IResolvedUrl,\n relativeUrl: string,\n ): Promise<string> {\n const fluidResolvedUrl = resolvedUrl as IFluidResolvedUrl;\n\n const parsedUrl = parse(fluidResolvedUrl.url);\n assert(!!parsedUrl.pathname, 0x0b9 /* \"PathName should exist\" */);\n const [, tenantId, documentId] = parsedUrl.pathname.split(\"/\");\n assert(!!tenantId, 0x0ba /* \"Tenant id should exist\" */);\n assert(!!documentId, 0x0bb /* \"Document id should exist\" */);\n\n let url = relativeUrl;\n if (url.startsWith(\"/\")) {\n url = url.substr(1);\n }\n\n return `${this.hostUrl}/${encodeURIComponent(\n tenantId)}/${encodeURIComponent(documentId)}/${url}`;\n }\n}\n\nexport interface IAlfredUser extends IUser {\n displayName: string;\n name: string;\n}\n\nexport interface IConfig {\n serverUrl: string;\n blobStorageUrl: string;\n tenantId: string;\n documentId: string;\n}\n"]}
@@ -1,9 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- *
5
- * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
- */
7
-
8
- export const pkgName = "@fluidframework/routerlicious-urlresolver";
9
- export const pkgVersion = "1.4.0-115997";
@@ -1,7 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./lib",
5
- "module": "esnext"
6
- },
7
- }