@fluidframework/azure-client 1.2.0-111554 → 2.0.0-dev.4.2.0.153917
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +5 -37
- package/CHANGELOG.md +8 -2
- package/README.md +117 -29
- package/api-extractor.json +10 -10
- package/dist/AzureAudience.d.ts.map +1 -1
- package/dist/AzureAudience.js.map +1 -1
- package/dist/AzureClient.d.ts +1 -0
- package/dist/AzureClient.d.ts.map +1 -1
- package/dist/AzureClient.js +2 -0
- package/dist/AzureClient.js.map +1 -1
- package/dist/AzureFunctionTokenProvider.d.ts +4 -0
- package/dist/AzureFunctionTokenProvider.d.ts.map +1 -1
- package/dist/AzureFunctionTokenProvider.js +4 -0
- package/dist/AzureFunctionTokenProvider.js.map +1 -1
- package/dist/AzureUrlResolver.d.ts +7 -0
- package/dist/AzureUrlResolver.d.ts.map +1 -1
- package/dist/AzureUrlResolver.js +7 -0
- package/dist/AzureUrlResolver.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +5 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/lib/AzureAudience.d.ts.map +1 -1
- package/lib/AzureAudience.js.map +1 -1
- package/lib/AzureClient.d.ts +1 -0
- package/lib/AzureClient.d.ts.map +1 -1
- package/lib/AzureClient.js +2 -0
- package/lib/AzureClient.js.map +1 -1
- package/lib/AzureFunctionTokenProvider.d.ts +4 -0
- package/lib/AzureFunctionTokenProvider.d.ts.map +1 -1
- package/lib/AzureFunctionTokenProvider.js +4 -0
- package/lib/AzureFunctionTokenProvider.js.map +1 -1
- package/lib/AzureUrlResolver.d.ts +7 -0
- package/lib/AzureUrlResolver.d.ts.map +1 -1
- package/lib/AzureUrlResolver.js +7 -0
- package/lib/AzureUrlResolver.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/interfaces.d.ts +5 -0
- package/lib/interfaces.d.ts.map +1 -1
- package/lib/interfaces.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js.map +1 -1
- package/package.json +54 -58
- package/src/AzureAudience.ts +19 -19
- package/src/AzureClient.ts +207 -203
- package/src/AzureFunctionTokenProvider.ts +35 -31
- package/src/AzureUrlResolver.ts +87 -80
- package/src/index.ts +13 -13
- package/src/interfaces.ts +75 -69
- package/src/packageVersion.ts +1 -1
- package/src/utils.ts +7 -7
- package/tsconfig.esnext.json +5 -5
- package/tsconfig.json +9 -9
package/.eslintrc.js
CHANGED
|
@@ -4,41 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
module.exports = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
rules: {
|
|
13
|
-
// Require jsdoc/tsdoc comments on public/exported API items.
|
|
14
|
-
"jsdoc/require-jsdoc": [
|
|
15
|
-
"error",
|
|
16
|
-
{
|
|
17
|
-
// Indicates that only module exports should be flagged for lacking jsdoc comments
|
|
18
|
-
publicOnly: true,
|
|
19
|
-
enableFixer: false, // Prevents eslint from adding empty comment blocks when run with `--fix`
|
|
20
|
-
require: {
|
|
21
|
-
ClassDeclaration: true,
|
|
22
|
-
FunctionDeclaration: true,
|
|
23
|
-
|
|
24
|
-
// Will report for *any* methods on exported classes, regardless of whether or not they are public
|
|
25
|
-
MethodDefinition: false,
|
|
26
|
-
},
|
|
27
|
-
contexts: ["TSEnumDeclaration", "TSInterfaceDeclaration", "TSTypeAliasDeclaration"],
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
|
|
31
|
-
// Ensure jsdoc/tsdoc comments contain a main description component
|
|
32
|
-
// (disallows empty comments / only tags).
|
|
33
|
-
"jsdoc/require-description": ["error", { checkConstructors: false }],
|
|
34
|
-
},
|
|
35
|
-
overrides: [
|
|
36
|
-
{
|
|
37
|
-
files: ["packageVersion.ts"],
|
|
38
|
-
rules: {
|
|
39
|
-
"jsdoc/require-jsdoc": "off",
|
|
40
|
-
"jsdoc/require-description": "off",
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
],
|
|
7
|
+
extends: [require.resolve("@fluidframework/eslint-config-fluid/strict"), "prettier"],
|
|
8
|
+
plugins: ["eslint-plugin-jsdoc"],
|
|
9
|
+
parserOptions: {
|
|
10
|
+
project: ["./tsconfig.json", "./src/test/tsconfig.json"],
|
|
11
|
+
},
|
|
44
12
|
};
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @fluidframework/azure-client
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 2.0.0-internal.4.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Feature: Gated experimental features ([#15029](https://github.com/microsoft/FluidFramework/pull-requests/15029)) [fc74ff201a](https://github.com/microsoft/FluidFramework/commits/fc74ff201a738a44c42fdc91323d8469ec6a50f2)
|
|
8
|
+
|
|
9
|
+
You can now opt in to experimental Fluid Framework features when using `AzureClient`.
|
package/README.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
The azure-client package provides a simple and powerful way to consume collaborative Fluid data with the Azure Fluid Relay service.
|
|
4
4
|
|
|
5
|
+
<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->
|
|
6
|
+
|
|
7
|
+
<!-- prettier-ignore-start -->
|
|
8
|
+
<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->
|
|
9
|
+
|
|
10
|
+
## Using Fluid Framework libraries
|
|
11
|
+
|
|
12
|
+
When taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.
|
|
13
|
+
While Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,
|
|
14
|
+
library consumers should always prefer `^`.
|
|
15
|
+
|
|
16
|
+
Note that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version
|
|
17
|
+
scheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the
|
|
18
|
+
[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)
|
|
19
|
+
package for more information including tools to convert between version schemes.
|
|
20
|
+
|
|
21
|
+
<!-- prettier-ignore-end -->
|
|
22
|
+
|
|
23
|
+
<!-- AUTO-GENERATED-CONTENT:END -->
|
|
24
|
+
|
|
5
25
|
## Using azure-client
|
|
6
26
|
|
|
7
27
|
The azure-client package has a `AzureClient` class that allows you to interact with Fluid.
|
|
@@ -33,11 +53,11 @@ import { AzureClient, AzureConnectionConfig } from "@fluidframework/azure-client
|
|
|
33
53
|
import { InsecureTokenProvider } from "@fluidframework/test-client-utils";
|
|
34
54
|
|
|
35
55
|
const clientProps = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
56
|
+
connection: {
|
|
57
|
+
type: "local",
|
|
58
|
+
tokenProvider: new InsecureTokenProvider("fooBar", { id: "123", name: "Test User" }),
|
|
59
|
+
endpoint: "http://localhost:7070",
|
|
60
|
+
},
|
|
41
61
|
};
|
|
42
62
|
const azureClient = new AzureClient(clientProps);
|
|
43
63
|
```
|
|
@@ -50,19 +70,25 @@ When running against a live Azure Fluid Relay instance, we can use the same inte
|
|
|
50
70
|
import { AzureClient, AzureConnectionConfig } from "@fluidframework/azure-client";
|
|
51
71
|
|
|
52
72
|
const clientProps = {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
connection: {
|
|
74
|
+
type: "remote",
|
|
75
|
+
tenantId: "YOUR-TENANT-ID-HERE",
|
|
76
|
+
tokenProvider: new AzureFunctionTokenProvider("AZURE-FUNCTION-URL" + "/api/GetAzureToken", {
|
|
77
|
+
userId: "test-user",
|
|
78
|
+
userName: "Test User",
|
|
79
|
+
}),
|
|
80
|
+
endpoint: "ENTER-SERVICE-DISCOVERY-URL-HERE",
|
|
81
|
+
},
|
|
62
82
|
};
|
|
63
83
|
const azureClient = new AzureClient(clientProps);
|
|
64
84
|
```
|
|
65
85
|
|
|
86
|
+
### Experimental Features
|
|
87
|
+
|
|
88
|
+
`AzureClient` supports the ability to instantiate with experimental features enabled.
|
|
89
|
+
These features are experimental in nature and should **NOT** be used in production applications.
|
|
90
|
+
To learn more, see [Experimental Features](https://fluidframework.com/docs/build/experimental-features/).
|
|
91
|
+
|
|
66
92
|
## Fluid Containers
|
|
67
93
|
|
|
68
94
|
A Container instance is a organizational unit within Fluid. Each Container instance has a connection to the defined Fluid Service and contains a collection of collaborative objects.
|
|
@@ -77,12 +103,12 @@ See [`ContainerSchema`](./src/types.ts) in [`./src/types/ts`](./src/types.ts) fo
|
|
|
77
103
|
|
|
78
104
|
```typescript
|
|
79
105
|
const schema = {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
106
|
+
initialObjects: {
|
|
107
|
+
/* ... */
|
|
108
|
+
},
|
|
109
|
+
dynamicObjectTypes: [
|
|
110
|
+
/*...*/
|
|
111
|
+
],
|
|
86
112
|
};
|
|
87
113
|
const azureClient = new AzureClient(props);
|
|
88
114
|
const { container, services } = await azureClient.createContainer(schema);
|
|
@@ -115,10 +141,10 @@ The most common way to use Fluid is through initial collaborative objects that a
|
|
|
115
141
|
// Define the keys and types of the initial list of collaborative objects.
|
|
116
142
|
// Here, we are using a SharedMap DDS on key "map1" and a SharedString on key "text1".
|
|
117
143
|
const schema = {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
144
|
+
initialObjects: {
|
|
145
|
+
map1: SharedMap,
|
|
146
|
+
text1: SharedString,
|
|
147
|
+
},
|
|
122
148
|
};
|
|
123
149
|
|
|
124
150
|
// Fetch back the container that had been created earlier with the same ID and schema
|
|
@@ -141,10 +167,10 @@ Dynamic objects are loaded on-demand to optimize for data virtualization. To get
|
|
|
141
167
|
|
|
142
168
|
```typescript
|
|
143
169
|
const schema = {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
170
|
+
initialObjects: {
|
|
171
|
+
map1: SharedMap,
|
|
172
|
+
},
|
|
173
|
+
dynamicObjectTypes: [SharedString],
|
|
148
174
|
};
|
|
149
175
|
|
|
150
176
|
const { container, services } = await azureClient.getContainer("_unique-id_", schema);
|
|
@@ -163,4 +189,66 @@ const text1 = await map1.get(); // Resolve the handle to get the object
|
|
|
163
189
|
const text1 = await map1.get("text1-unique-id").get();
|
|
164
190
|
```
|
|
165
191
|
|
|
166
|
-
|
|
192
|
+
<!-- AUTO-GENERATED-CONTENT:START (README_CONTRIBUTION_GUIDELINES_SECTION:includeHeading=TRUE) -->
|
|
193
|
+
|
|
194
|
+
<!-- prettier-ignore-start -->
|
|
195
|
+
<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->
|
|
196
|
+
|
|
197
|
+
## Contribution Guidelines
|
|
198
|
+
|
|
199
|
+
There are many ways to [contribute](https://github.com/microsoft/FluidFramework/blob/main/CONTRIBUTING.md) to Fluid.
|
|
200
|
+
|
|
201
|
+
- Participate in Q&A in our [GitHub Discussions](https://github.com/microsoft/FluidFramework/discussions).
|
|
202
|
+
- [Submit bugs](https://github.com/microsoft/FluidFramework/issues) and help us verify fixes as they are checked in.
|
|
203
|
+
- Review the [source code changes](https://github.com/microsoft/FluidFramework/pulls).
|
|
204
|
+
- [Contribute bug fixes](https://github.com/microsoft/FluidFramework/blob/main/CONTRIBUTING.md).
|
|
205
|
+
|
|
206
|
+
Detailed instructions for working in the repo can be found in the [Wiki](https://github.com/microsoft/FluidFramework/wiki).
|
|
207
|
+
|
|
208
|
+
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
|
|
209
|
+
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
|
210
|
+
|
|
211
|
+
This project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.
|
|
212
|
+
Use of these trademarks or logos must follow Microsoft’s [Trademark & Brand Guidelines](https://www.microsoft.com/trademarks).
|
|
213
|
+
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
|
|
214
|
+
|
|
215
|
+
<!-- prettier-ignore-end -->
|
|
216
|
+
|
|
217
|
+
<!-- AUTO-GENERATED-CONTENT:END -->
|
|
218
|
+
|
|
219
|
+
<!-- AUTO-GENERATED-CONTENT:START (README_HELP_SECTION:includeHeading=TRUE) -->
|
|
220
|
+
|
|
221
|
+
<!-- prettier-ignore-start -->
|
|
222
|
+
<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->
|
|
223
|
+
|
|
224
|
+
## Help
|
|
225
|
+
|
|
226
|
+
Not finding what you're looking for in this README? Check out our [GitHub
|
|
227
|
+
Wiki](https://github.com/microsoft/FluidFramework/wiki) or [fluidframework.com](https://fluidframework.com/docs/).
|
|
228
|
+
|
|
229
|
+
Still not finding what you're looking for? Please [file an
|
|
230
|
+
issue](https://github.com/microsoft/FluidFramework/wiki/Submitting-Bugs-and-Feature-Requests).
|
|
231
|
+
|
|
232
|
+
Thank you!
|
|
233
|
+
|
|
234
|
+
<!-- prettier-ignore-end -->
|
|
235
|
+
|
|
236
|
+
<!-- AUTO-GENERATED-CONTENT:END -->
|
|
237
|
+
|
|
238
|
+
<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->
|
|
239
|
+
|
|
240
|
+
<!-- prettier-ignore-start -->
|
|
241
|
+
<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->
|
|
242
|
+
|
|
243
|
+
## Trademark
|
|
244
|
+
|
|
245
|
+
This project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.
|
|
246
|
+
|
|
247
|
+
Use of these trademarks or logos must follow Microsoft's [Trademark & Brand
|
|
248
|
+
Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
|
|
249
|
+
|
|
250
|
+
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
|
|
251
|
+
|
|
252
|
+
<!-- prettier-ignore-end -->
|
|
253
|
+
|
|
254
|
+
<!-- AUTO-GENERATED-CONTENT:END -->
|
package/api-extractor.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
|
|
3
|
+
"extends": "@fluidframework/build-common/api-extractor-common-strict.json",
|
|
4
|
+
"apiReport": {
|
|
5
|
+
"enabled": true,
|
|
6
|
+
"reportFolder": "<projectFolder>/../../../api-report/"
|
|
7
|
+
},
|
|
8
|
+
"docModel": {
|
|
9
|
+
"enabled": true,
|
|
10
|
+
"apiJsonFilePath": "<projectFolder>/../../_api-extractor-temp/doc-models/<unscopedPackageName>.api.json"
|
|
11
|
+
}
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureAudience.d.ts","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAa,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtE;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,eAAe,CAAC,WAAW,CAAE,YAAW,cAAc;
|
|
1
|
+
{"version":3,"file":"AzureAudience.d.ts","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAa,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtE;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,eAAe,CAAC,WAAW,CAAE,YAAW,cAAc;IACxF;;;;;;;;OAQG;IACH,SAAS,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW;CAWnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureAudience.js","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,+DAAsD;AACtD,+DAA+D;AAK/D;;;;GAIG;AACH,MAAa,aAAc,SAAQ,8BAA4B;
|
|
1
|
+
{"version":3,"file":"AzureAudience.js","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,+DAAsD;AACtD,+DAA+D;AAK/D;;;;GAIG;AACH,MAAa,aAAc,SAAQ,8BAA4B;IAC9D;;;;;;;;OAQG;IACO,mBAAmB,CAAC,cAAuB;QACpD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAiB,CAAC;QACnD,IAAA,qBAAM,EAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,MAAK,SAAS,EAAE,uCAAuC,CAAC,CAAC;QAE/E,OAAO;YACN,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE;YAC9B,QAAQ,EAAE,SAAS,CAAC,IAAI;YACxB,WAAW,EAAE,EAAE;YACf,iBAAiB,EAAE,SAAS,CAAC,iBAA4B;SACzD,CAAC;IACH,CAAC;CACD;AArBD,sCAqBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { assert } from \"@fluidframework/common-utils\";\nimport { ServiceAudience } from \"@fluidframework/fluid-static\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\n\nimport { AzureMember, AzureUser, IAzureAudience } from \"./interfaces\";\n\n/**\n * Azure-specific {@link @fluidframework/fluid-static#ServiceAudience} implementation.\n *\n * @remarks Operates in terms of {@link AzureMember}s.\n */\nexport class AzureAudience extends ServiceAudience<AzureMember> implements IAzureAudience {\n\t/**\n\t * Creates a {@link @fluidframework/fluid-static#ServiceAudience} from the provided\n\t * {@link @fluidframework/protocol-definitions#IClient | audience member}.\n\t *\n\t * @param audienceMember - Audience member for which the `ServiceAudience` will be generated.\n\t * Note: its {@link @fluidframework/protocol-definitions#IClient.user} is required to be an {@link AzureUser}.\n\t *\n\t * @internal\n\t */\n\tprotected createServiceMember(audienceMember: IClient): AzureMember {\n\t\tconst azureUser = audienceMember.user as AzureUser;\n\t\tassert(azureUser?.name !== undefined, 'Provided user was not an \"AzureUser\".');\n\n\t\treturn {\n\t\t\tuserId: audienceMember.user.id,\n\t\t\tuserName: azureUser.name,\n\t\t\tconnections: [],\n\t\t\tadditionalDetails: azureUser.additionalDetails as unknown,\n\t\t};\n\t}\n}\n"]}
|
package/dist/AzureClient.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare class AzureClient {
|
|
|
8
8
|
private readonly props;
|
|
9
9
|
private readonly documentServiceFactory;
|
|
10
10
|
private readonly urlResolver;
|
|
11
|
+
private readonly configProvider;
|
|
11
12
|
/**
|
|
12
13
|
* Creates a new client instance using configuration parameters.
|
|
13
14
|
* @param props - Properties for initializing a new AzureClient instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureClient.d.ts","sourceRoot":"","sources":["../src/AzureClient.ts"],"names":[],"mappings":"AAYA,OAAO,
|
|
1
|
+
{"version":3,"file":"AzureClient.d.ts","sourceRoot":"","sources":["../src/AzureClient.ts"],"names":[],"mappings":"AAYA,OAAO,EACN,eAAe,EAGf,eAAe,EAEf,MAAM,8BAA8B,CAAC;AAQtC,OAAO,EACN,gBAAgB,EAEhB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,MAAM,cAAc,CAAC;AAetB;;;GAGG;AACH,qBAAa,WAAW;IASJ,OAAO,CAAC,QAAQ,CAAC,KAAK;IARzC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA0B;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE;;;OAGG;gBACiC,KAAK,EAAE,gBAAgB;IAc3D;;;;OAIG;IACU,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC;QACvE,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAaF;;;;;;;OAOG;IACU,aAAa,CACzB,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,eAAe,EAChC,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IA8BF;;;;;OAKG;IACU,YAAY,CACxB,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,eAAe,GAC9B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAaF;;;;;;OAMG;IACU,oBAAoB,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAwBnC,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,YAAY;YA8BN,oBAAoB;CA4BlC"}
|
package/dist/AzureClient.js
CHANGED
|
@@ -43,6 +43,7 @@ class AzureClient {
|
|
|
43
43
|
// storage format. Azure Fluid Relay supports whole summary upload. Local currently does not.
|
|
44
44
|
const isRemoteConnection = (0, utils_1.isAzureRemoteConnectionConfig)(this.props.connection);
|
|
45
45
|
this.documentServiceFactory = new routerlicious_driver_1.RouterliciousDocumentServiceFactory(this.props.connection.tokenProvider, { enableWholeSummaryUpload: isRemoteConnection, enableDiscovery: isRemoteConnection });
|
|
46
|
+
this.configProvider = props.configProvider;
|
|
46
47
|
}
|
|
47
48
|
/**
|
|
48
49
|
* Creates a new detached container instance in the Azure Fluid Relay.
|
|
@@ -164,6 +165,7 @@ class AzureClient {
|
|
|
164
165
|
codeLoader,
|
|
165
166
|
logger: this.props.logger,
|
|
166
167
|
options: { client },
|
|
168
|
+
configProvider: this.configProvider,
|
|
167
169
|
});
|
|
168
170
|
}
|
|
169
171
|
async createFluidContainer(container, connection) {
|
package/dist/AzureClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureClient.js","sourceRoot":"","sources":["../src/AzureClient.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 */\nimport {\n AttachState,\n IContainer,\n IFluidModuleWithDetails,\n} from \"@fluidframework/container-definitions\";\nimport { Loader } from \"@fluidframework/container-loader\";\nimport { IDocumentServiceFactory, IUrlResolver } from \"@fluidframework/driver-definitions\";\nimport { ensureFluidResolvedUrl } from \"@fluidframework/driver-utils\";\nimport {\n ContainerSchema,\n DOProviderContainerRuntimeFactory,\n FluidContainer,\n IFluidContainer,\n RootDataObject,\n} from \"@fluidframework/fluid-static\";\nimport { IClient, SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { RouterliciousDocumentServiceFactory } from \"@fluidframework/routerlicious-driver\";\nimport { requestFluidObject } from \"@fluidframework/runtime-utils\";\n\nimport { AzureAudience } from \"./AzureAudience\";\nimport { AzureUrlResolver, createAzureCreateNewRequest } from \"./AzureUrlResolver\";\nimport {\n AzureClientProps,\n AzureConnectionConfig,\n AzureContainerServices,\n AzureContainerVersion,\n AzureGetVersionsOptions,\n} from \"./interfaces\";\nimport { isAzureRemoteConnectionConfig } from \"./utils\";\n\n/**\n * Strongly typed id for connecting to a local Azure Fluid Relay.\n */\nconst LOCAL_MODE_TENANT_ID = \"local\";\nconst getTenantId = (connectionProps: AzureConnectionConfig): string => {\n return isAzureRemoteConnectionConfig(connectionProps)\n ? connectionProps.tenantId\n : LOCAL_MODE_TENANT_ID;\n};\n\nconst MAX_VERSION_COUNT = 5;\n\n/**\n * AzureClient provides the ability to have a Fluid object backed by the Azure Fluid Relay or,\n * when running with local tenantId, have it be backed by a local Azure Fluid Relay instance.\n */\nexport class AzureClient {\n private readonly documentServiceFactory: IDocumentServiceFactory;\n private readonly urlResolver: IUrlResolver;\n\n /**\n * Creates a new client instance using configuration parameters.\n * @param props - Properties for initializing a new AzureClient instance\n */\n constructor(private readonly props: AzureClientProps) {\n // remove trailing slash from URL if any\n props.connection.endpoint = props.connection.endpoint.replace(/\\/$/, \"\");\n this.urlResolver = new AzureUrlResolver();\n // The local service implementation differs from the Azure Fluid Relay in blob\n // storage format. Azure Fluid Relay supports whole summary upload. Local currently does not.\n const isRemoteConnection = isAzureRemoteConnectionConfig(this.props.connection);\n this.documentServiceFactory = new RouterliciousDocumentServiceFactory(\n this.props.connection.tokenProvider,\n { enableWholeSummaryUpload: isRemoteConnection, enableDiscovery: isRemoteConnection },\n );\n }\n\n /**\n * Creates a new detached container instance in the Azure Fluid Relay.\n * @param containerSchema - Container schema for the new container.\n * @returns New detached container instance along with associated services.\n */\n public async createContainer(containerSchema: ContainerSchema): Promise<{\n container: IFluidContainer;\n services: AzureContainerServices;\n }> {\n const loader = this.createLoader(containerSchema);\n\n const container = await loader.createDetachedContainer({\n package: \"no-dynamic-package\",\n config: {},\n });\n\n const fluidContainer = await this.createFluidContainer(container, this.props.connection);\n const services = this.getContainerServices(container);\n return { container: fluidContainer, services };\n }\n\n /**\n * Creates new detached container out of specific version of another container.\n * @param id - Unique ID of the source container in Azure Fluid Relay.\n * @param containerSchema - Container schema used to access data objects in the container.\n * @param version - Unique version of the source container in Azure Fluid Relay.\n * It defaults to latest version if parameter not provided.\n * @returns New detached container instance along with associated services.\n */\n public async copyContainer(\n id: string,\n containerSchema: ContainerSchema,\n version?: AzureContainerVersion,\n ): Promise<{\n container: IFluidContainer;\n services: AzureContainerServices;\n }> {\n const loader = this.createLoader(containerSchema);\n const url = new URL(this.props.connection.endpoint);\n url.searchParams.append(\"storage\", encodeURIComponent(this.props.connection.endpoint));\n url.searchParams.append(\"tenantId\", encodeURIComponent(getTenantId(this.props.connection)));\n url.searchParams.append(\"containerId\", encodeURIComponent(id));\n const sourceContainer = await loader.resolve({ url: url.href });\n\n if (sourceContainer.resolvedUrl === undefined) {\n throw new Error(\"Source container cannot resolve URL.\");\n }\n\n const documentService = await this.documentServiceFactory.createDocumentService(\n sourceContainer.resolvedUrl,\n );\n const storage = await documentService.connectToStorage();\n const handle = {\n type: SummaryType.Handle,\n handleType: SummaryType.Tree,\n handle: version?.id ?? \"latest\",\n };\n const tree = await storage.downloadSummary(handle);\n\n const container = await loader.rehydrateDetachedContainerFromSnapshot(JSON.stringify(tree));\n\n const fluidContainer = await this.createFluidContainer(container, this.props.connection);\n const services = this.getContainerServices(container);\n return { container: fluidContainer, services };\n }\n\n /**\n * Accesses the existing container given its unique ID in the Azure Fluid Relay.\n * @param id - Unique ID of the container in Azure Fluid Relay.\n * @param containerSchema - Container schema used to access data objects in the container.\n * @returns Existing container instance along with associated services.\n */\n public async getContainer(\n id: string,\n containerSchema: ContainerSchema,\n ): Promise<{\n container: IFluidContainer;\n services: AzureContainerServices;\n }> {\n const loader = this.createLoader(containerSchema);\n const url = new URL(this.props.connection.endpoint);\n url.searchParams.append(\"storage\", encodeURIComponent(this.props.connection.endpoint));\n url.searchParams.append(\"tenantId\", encodeURIComponent(getTenantId(this.props.connection)));\n url.searchParams.append(\"containerId\", encodeURIComponent(id));\n const container = await loader.resolve({ url: url.href });\n const rootDataObject = await requestFluidObject<RootDataObject>(container, \"/\");\n const fluidContainer = new FluidContainer(container, rootDataObject);\n const services = this.getContainerServices(container);\n return { container: fluidContainer, services };\n }\n\n /**\n * Get the list of versions for specific container.\n * @param id - Unique ID of the source container in Azure Fluid Relay.\n * @param options - \"Get\" options. If options are not provided, API\n * will assume maxCount of versions to retreive to be 5.\n * @returns Array of available container versions.\n */\n public async getContainerVersions(\n id: string,\n options?: AzureGetVersionsOptions,\n ): Promise<AzureContainerVersion[]> {\n const url = new URL(this.props.connection.endpoint);\n url.searchParams.append(\"storage\", encodeURIComponent(this.props.connection.endpoint));\n url.searchParams.append(\"tenantId\", encodeURIComponent(getTenantId(this.props.connection)));\n url.searchParams.append(\"containerId\", encodeURIComponent(id));\n\n const resolvedUrl = await this.urlResolver.resolve({ url: url.href });\n if (!resolvedUrl) {\n throw new Error(\"Unable to resolved URL\");\n }\n const documentService = await this.documentServiceFactory.createDocumentService(\n resolvedUrl,\n );\n const storage = await documentService.connectToStorage();\n\n // External API uses null\n // eslint-disable-next-line unicorn/no-null\n const versions = await storage.getVersions(null, options?.maxCount ?? MAX_VERSION_COUNT);\n\n return versions.map((item) => {\n return { id: item.id, date: item.date };\n });\n }\n\n private getContainerServices(container: IContainer): AzureContainerServices {\n return {\n audience: new AzureAudience(container),\n };\n }\n\n private createLoader(containerSchema: ContainerSchema): Loader {\n const runtimeFactory = new DOProviderContainerRuntimeFactory(containerSchema);\n const load = async (): Promise<IFluidModuleWithDetails> => {\n return {\n module: { fluidExport: runtimeFactory },\n details: { package: \"no-dynamic-package\", config: {} },\n };\n };\n\n const codeLoader = { load };\n const client: IClient = {\n details: {\n capabilities: { interactive: true },\n },\n permission: [],\n scopes: [],\n user: { id: \"\" },\n mode: \"write\",\n };\n\n return new Loader({\n urlResolver: this.urlResolver,\n documentServiceFactory: this.documentServiceFactory,\n codeLoader,\n logger: this.props.logger,\n options: { client },\n });\n }\n\n private async createFluidContainer(\n container: IContainer,\n connection: AzureConnectionConfig,\n ): Promise<FluidContainer> {\n const createNewRequest = createAzureCreateNewRequest(\n connection.endpoint,\n getTenantId(connection),\n );\n\n const rootDataObject = await requestFluidObject<RootDataObject>(container, \"/\");\n\n /**\n * See {@link FluidContainer.attach}\n */\n const attach = async (): Promise<string> => {\n if (container.attachState !== AttachState.Detached) {\n throw new Error(\"Cannot attach container. Container is not in detached state\");\n }\n await container.attach(createNewRequest);\n const resolved = container.resolvedUrl;\n ensureFluidResolvedUrl(resolved);\n return resolved.id;\n };\n const fluidContainer = new FluidContainer(container, rootDataObject);\n fluidContainer.attach = attach;\n return fluidContainer;\n }\n // #endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AzureClient.js","sourceRoot":"","sources":["../src/AzureClient.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 */\nimport {\n\tAttachState,\n\tIContainer,\n\tIFluidModuleWithDetails,\n} from \"@fluidframework/container-definitions\";\nimport { Loader } from \"@fluidframework/container-loader\";\nimport { IDocumentServiceFactory, IUrlResolver } from \"@fluidframework/driver-definitions\";\nimport { ensureFluidResolvedUrl } from \"@fluidframework/driver-utils\";\nimport {\n\tContainerSchema,\n\tDOProviderContainerRuntimeFactory,\n\tFluidContainer,\n\tIFluidContainer,\n\tRootDataObject,\n} from \"@fluidframework/fluid-static\";\nimport { IClient, SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { RouterliciousDocumentServiceFactory } from \"@fluidframework/routerlicious-driver\";\nimport { requestFluidObject } from \"@fluidframework/runtime-utils\";\n\nimport { IConfigProviderBase } from \"@fluidframework/telemetry-utils\";\nimport { AzureAudience } from \"./AzureAudience\";\nimport { AzureUrlResolver, createAzureCreateNewRequest } from \"./AzureUrlResolver\";\nimport {\n\tAzureClientProps,\n\tAzureConnectionConfig,\n\tAzureContainerServices,\n\tAzureContainerVersion,\n\tAzureGetVersionsOptions,\n} from \"./interfaces\";\nimport { isAzureRemoteConnectionConfig } from \"./utils\";\n\n/**\n * Strongly typed id for connecting to a local Azure Fluid Relay.\n */\nconst LOCAL_MODE_TENANT_ID = \"local\";\nconst getTenantId = (connectionProps: AzureConnectionConfig): string => {\n\treturn isAzureRemoteConnectionConfig(connectionProps)\n\t\t? connectionProps.tenantId\n\t\t: LOCAL_MODE_TENANT_ID;\n};\n\nconst MAX_VERSION_COUNT = 5;\n\n/**\n * AzureClient provides the ability to have a Fluid object backed by the Azure Fluid Relay or,\n * when running with local tenantId, have it be backed by a local Azure Fluid Relay instance.\n */\nexport class AzureClient {\n\tprivate readonly documentServiceFactory: IDocumentServiceFactory;\n\tprivate readonly urlResolver: IUrlResolver;\n\tprivate readonly configProvider: IConfigProviderBase | undefined;\n\n\t/**\n\t * Creates a new client instance using configuration parameters.\n\t * @param props - Properties for initializing a new AzureClient instance\n\t */\n\tpublic constructor(private readonly props: AzureClientProps) {\n\t\t// remove trailing slash from URL if any\n\t\tprops.connection.endpoint = props.connection.endpoint.replace(/\\/$/, \"\");\n\t\tthis.urlResolver = new AzureUrlResolver();\n\t\t// The local service implementation differs from the Azure Fluid Relay in blob\n\t\t// storage format. Azure Fluid Relay supports whole summary upload. Local currently does not.\n\t\tconst isRemoteConnection = isAzureRemoteConnectionConfig(this.props.connection);\n\t\tthis.documentServiceFactory = new RouterliciousDocumentServiceFactory(\n\t\t\tthis.props.connection.tokenProvider,\n\t\t\t{ enableWholeSummaryUpload: isRemoteConnection, enableDiscovery: isRemoteConnection },\n\t\t);\n\t\tthis.configProvider = props.configProvider;\n\t}\n\n\t/**\n\t * Creates a new detached container instance in the Azure Fluid Relay.\n\t * @param containerSchema - Container schema for the new container.\n\t * @returns New detached container instance along with associated services.\n\t */\n\tpublic async createContainer(containerSchema: ContainerSchema): Promise<{\n\t\tcontainer: IFluidContainer;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\n\t\tconst container = await loader.createDetachedContainer({\n\t\t\tpackage: \"no-dynamic-package\",\n\t\t\tconfig: {},\n\t\t});\n\n\t\tconst fluidContainer = await this.createFluidContainer(container, this.props.connection);\n\t\tconst services = this.getContainerServices(container);\n\t\treturn { container: fluidContainer, services };\n\t}\n\n\t/**\n\t * Creates new detached container out of specific version of another container.\n\t * @param id - Unique ID of the source container in Azure Fluid Relay.\n\t * @param containerSchema - Container schema used to access data objects in the container.\n\t * @param version - Unique version of the source container in Azure Fluid Relay.\n\t * It defaults to latest version if parameter not provided.\n\t * @returns New detached container instance along with associated services.\n\t */\n\tpublic async copyContainer(\n\t\tid: string,\n\t\tcontainerSchema: ContainerSchema,\n\t\tversion?: AzureContainerVersion,\n\t): Promise<{\n\t\tcontainer: IFluidContainer;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.props.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.props.connection.endpoint));\n\t\turl.searchParams.append(\"tenantId\", encodeURIComponent(getTenantId(this.props.connection)));\n\t\turl.searchParams.append(\"containerId\", encodeURIComponent(id));\n\t\tconst sourceContainer = await loader.resolve({ url: url.href });\n\n\t\tif (sourceContainer.resolvedUrl === undefined) {\n\t\t\tthrow new Error(\"Source container cannot resolve URL.\");\n\t\t}\n\n\t\tconst documentService = await this.documentServiceFactory.createDocumentService(\n\t\t\tsourceContainer.resolvedUrl,\n\t\t);\n\t\tconst storage = await documentService.connectToStorage();\n\t\tconst handle = {\n\t\t\ttype: SummaryType.Handle,\n\t\t\thandleType: SummaryType.Tree,\n\t\t\thandle: version?.id ?? \"latest\",\n\t\t};\n\t\tconst tree = await storage.downloadSummary(handle);\n\n\t\tconst container = await loader.rehydrateDetachedContainerFromSnapshot(JSON.stringify(tree));\n\n\t\tconst fluidContainer = await this.createFluidContainer(container, this.props.connection);\n\t\tconst services = this.getContainerServices(container);\n\t\treturn { container: fluidContainer, services };\n\t}\n\n\t/**\n\t * Accesses the existing container given its unique ID in the Azure Fluid Relay.\n\t * @param id - Unique ID of the container in Azure Fluid Relay.\n\t * @param containerSchema - Container schema used to access data objects in the container.\n\t * @returns Existing container instance along with associated services.\n\t */\n\tpublic async getContainer(\n\t\tid: string,\n\t\tcontainerSchema: ContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.props.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.props.connection.endpoint));\n\t\turl.searchParams.append(\"tenantId\", encodeURIComponent(getTenantId(this.props.connection)));\n\t\turl.searchParams.append(\"containerId\", encodeURIComponent(id));\n\t\tconst container = await loader.resolve({ url: url.href });\n\t\tconst rootDataObject = await requestFluidObject<RootDataObject>(container, \"/\");\n\t\tconst fluidContainer = new FluidContainer(container, rootDataObject);\n\t\tconst services = this.getContainerServices(container);\n\t\treturn { container: fluidContainer, services };\n\t}\n\n\t/**\n\t * Get the list of versions for specific container.\n\t * @param id - Unique ID of the source container in Azure Fluid Relay.\n\t * @param options - \"Get\" options. If options are not provided, API\n\t * will assume maxCount of versions to retreive to be 5.\n\t * @returns Array of available container versions.\n\t */\n\tpublic async getContainerVersions(\n\t\tid: string,\n\t\toptions?: AzureGetVersionsOptions,\n\t): Promise<AzureContainerVersion[]> {\n\t\tconst url = new URL(this.props.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.props.connection.endpoint));\n\t\turl.searchParams.append(\"tenantId\", encodeURIComponent(getTenantId(this.props.connection)));\n\t\turl.searchParams.append(\"containerId\", encodeURIComponent(id));\n\n\t\tconst resolvedUrl = await this.urlResolver.resolve({ url: url.href });\n\t\tif (!resolvedUrl) {\n\t\t\tthrow new Error(\"Unable to resolved URL\");\n\t\t}\n\t\tconst documentService = await this.documentServiceFactory.createDocumentService(\n\t\t\tresolvedUrl,\n\t\t);\n\t\tconst storage = await documentService.connectToStorage();\n\n\t\t// External API uses null\n\t\t// eslint-disable-next-line unicorn/no-null\n\t\tconst versions = await storage.getVersions(null, options?.maxCount ?? MAX_VERSION_COUNT);\n\n\t\treturn versions.map((item) => {\n\t\t\treturn { id: item.id, date: item.date };\n\t\t});\n\t}\n\n\tprivate getContainerServices(container: IContainer): AzureContainerServices {\n\t\treturn {\n\t\t\taudience: new AzureAudience(container),\n\t\t};\n\t}\n\n\tprivate createLoader(containerSchema: ContainerSchema): Loader {\n\t\tconst runtimeFactory = new DOProviderContainerRuntimeFactory(containerSchema);\n\t\tconst load = async (): Promise<IFluidModuleWithDetails> => {\n\t\t\treturn {\n\t\t\t\tmodule: { fluidExport: runtimeFactory },\n\t\t\t\tdetails: { package: \"no-dynamic-package\", config: {} },\n\t\t\t};\n\t\t};\n\n\t\tconst codeLoader = { load };\n\t\tconst client: IClient = {\n\t\t\tdetails: {\n\t\t\t\tcapabilities: { interactive: true },\n\t\t\t},\n\t\t\tpermission: [],\n\t\t\tscopes: [],\n\t\t\tuser: { id: \"\" },\n\t\t\tmode: \"write\",\n\t\t};\n\n\t\treturn new Loader({\n\t\t\turlResolver: this.urlResolver,\n\t\t\tdocumentServiceFactory: this.documentServiceFactory,\n\t\t\tcodeLoader,\n\t\t\tlogger: this.props.logger,\n\t\t\toptions: { client },\n\t\t\tconfigProvider: this.configProvider,\n\t\t});\n\t}\n\n\tprivate async createFluidContainer(\n\t\tcontainer: IContainer,\n\t\tconnection: AzureConnectionConfig,\n\t): Promise<FluidContainer> {\n\t\tconst createNewRequest = createAzureCreateNewRequest(\n\t\t\tconnection.endpoint,\n\t\t\tgetTenantId(connection),\n\t\t);\n\n\t\tconst rootDataObject = await requestFluidObject<RootDataObject>(container, \"/\");\n\n\t\t/**\n\t\t * See {@link FluidContainer.attach}\n\t\t */\n\t\tconst attach = async (): Promise<string> => {\n\t\t\tif (container.attachState !== AttachState.Detached) {\n\t\t\t\tthrow new Error(\"Cannot attach container. Container is not in detached state\");\n\t\t\t}\n\t\t\tawait container.attach(createNewRequest);\n\t\t\tconst resolved = container.resolvedUrl;\n\t\t\tensureFluidResolvedUrl(resolved);\n\t\t\treturn resolved.id;\n\t\t};\n\t\tconst fluidContainer = new FluidContainer(container, rootDataObject);\n\t\tfluidContainer.attach = attach;\n\t\treturn fluidContainer;\n\t}\n\t// #endregion\n}\n"]}
|
|
@@ -3,6 +3,10 @@ import { AzureMember } from "./interfaces";
|
|
|
3
3
|
/**
|
|
4
4
|
* Token Provider implementation for connecting to an Azure Function endpoint for
|
|
5
5
|
* Azure Fluid Relay token resolution.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated 1.2.0, This API will be removed in 2.0.0
|
|
8
|
+
* No replacement since it is not expected anyone will use this token provider as is
|
|
9
|
+
* See https://github.com/microsoft/FluidFramework/issues/13693 for context
|
|
6
10
|
*/
|
|
7
11
|
export declare class AzureFunctionTokenProvider implements ITokenProvider {
|
|
8
12
|
private readonly azFunctionUrl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureFunctionTokenProvider.d.ts","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"AzureFunctionTokenProvider.d.ts","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;GAOG;AACH,qBAAa,0BAA2B,YAAW,cAAc;IAO/D,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAPvB;;;;OAIG;gBAEe,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,iFAAgE;IAG1E,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMjF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YAM/E,QAAQ;CAYtB"}
|
|
@@ -12,6 +12,10 @@ const axios_1 = __importDefault(require("axios"));
|
|
|
12
12
|
/**
|
|
13
13
|
* Token Provider implementation for connecting to an Azure Function endpoint for
|
|
14
14
|
* Azure Fluid Relay token resolution.
|
|
15
|
+
*
|
|
16
|
+
* @deprecated 1.2.0, This API will be removed in 2.0.0
|
|
17
|
+
* No replacement since it is not expected anyone will use this token provider as is
|
|
18
|
+
* See https://github.com/microsoft/FluidFramework/issues/13693 for context
|
|
15
19
|
*/
|
|
16
20
|
class AzureFunctionTokenProvider {
|
|
17
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureFunctionTokenProvider.js","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":";;;;;;AAAA;;;GAGG;AACH,kDAA0B;AAM1B
|
|
1
|
+
{"version":3,"file":"AzureFunctionTokenProvider.js","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":";;;;;;AAAA;;;GAGG;AACH,kDAA0B;AAM1B;;;;;;;GAOG;AACH,MAAa,0BAA0B;IACtC;;;;OAIG;IACH,YACkB,aAAqB,EACrB,IAAqE;QADrE,kBAAa,GAAb,aAAa,CAAQ;QACrB,SAAI,GAAJ,IAAI,CAAiE;IACpF,CAAC;IAEG,KAAK,CAAC,iBAAiB,CAAC,QAAgB,EAAE,UAAmB;QACnE,OAAO;YACN,GAAG,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;SAC9C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,QAAgB,EAAE,UAAkB;QAClE,OAAO;YACN,GAAG,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;SAC9C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,UAAmB;;QAC3D,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;YACpD,MAAM,EAAE;gBACP,QAAQ;gBACR,UAAU;gBACV,MAAM,EAAE,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM;gBACzB,QAAQ,EAAE,MAAA,IAAI,CAAC,IAAI,0CAAE,QAAQ;gBAC7B,iBAAiB,EAAE,MAAA,IAAI,CAAC,IAAI,0CAAE,iBAA4B;aAC1D;SACD,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAc,CAAC;IAChC,CAAC;CACD;AAnCD,gEAmCC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport axios from \"axios\";\n\nimport { ITokenProvider, ITokenResponse } from \"@fluidframework/routerlicious-driver\";\n\nimport { AzureMember } from \"./interfaces\";\n\n/**\n * Token Provider implementation for connecting to an Azure Function endpoint for\n * Azure Fluid Relay token resolution.\n *\n * @deprecated 1.2.0, This API will be removed in 2.0.0\n * No replacement since it is not expected anyone will use this token provider as is\n * See https://github.com/microsoft/FluidFramework/issues/13693 for context\n */\nexport class AzureFunctionTokenProvider implements ITokenProvider {\n\t/**\n\t * Creates a new instance using configuration parameters.\n\t * @param azFunctionUrl - URL to Azure Function endpoint\n\t * @param user - User object\n\t */\n\tpublic constructor(\n\t\tprivate readonly azFunctionUrl: string,\n\t\tprivate readonly user?: Pick<AzureMember, \"userId\" | \"userName\" | \"additionalDetails\">,\n\t) {}\n\n\tpublic async fetchOrdererToken(tenantId: string, documentId?: string): Promise<ITokenResponse> {\n\t\treturn {\n\t\t\tjwt: await this.getToken(tenantId, documentId),\n\t\t};\n\t}\n\n\tpublic async fetchStorageToken(tenantId: string, documentId: string): Promise<ITokenResponse> {\n\t\treturn {\n\t\t\tjwt: await this.getToken(tenantId, documentId),\n\t\t};\n\t}\n\n\tprivate async getToken(tenantId: string, documentId?: string): Promise<string> {\n\t\tconst response = await axios.get(this.azFunctionUrl, {\n\t\t\tparams: {\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\tuserId: this.user?.userId,\n\t\t\t\tuserName: this.user?.userName,\n\t\t\t\tadditionalDetails: this.user?.additionalDetails as unknown,\n\t\t\t},\n\t\t});\n\t\treturn response.data as string;\n\t}\n}\n"]}
|
|
@@ -16,5 +16,12 @@ export declare class AzureUrlResolver implements IUrlResolver {
|
|
|
16
16
|
resolve(request: IRequest): Promise<IFluidResolvedUrl>;
|
|
17
17
|
getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string>;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a request object that can be passed to {@link @fluidframework/fluid-static#IFluidContainer.attach} to
|
|
21
|
+
* request creation of a new Fluid Container on the Azure service.
|
|
22
|
+
*
|
|
23
|
+
* @param endpointUrl - URI to the Azure Fluid Relay service discovery endpoint.
|
|
24
|
+
* @param tenantId - Unique tenant identifier.
|
|
25
|
+
*/
|
|
19
26
|
export declare const createAzureCreateNewRequest: (endpointUrl: string, tenantId: string) => IRequest;
|
|
20
27
|
//# sourceMappingURL=AzureUrlResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureUrlResolver.d.ts","sourceRoot":"","sources":["../src/AzureUrlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"AzureUrlResolver.d.ts","sourceRoot":"","sources":["../src/AzureUrlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAEN,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,MAAM,oCAAoC,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,YAAY;;IAGvC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoCtD,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAM5F;AA+BD;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,gBAAiB,MAAM,YAAY,MAAM,KAAG,QAUnF,CAAC"}
|
package/dist/AzureUrlResolver.js
CHANGED
|
@@ -77,6 +77,13 @@ function decodeAzureUrl(urlString) {
|
|
|
77
77
|
containerId: containerIdDecoded,
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates a request object that can be passed to {@link @fluidframework/fluid-static#IFluidContainer.attach} to
|
|
82
|
+
* request creation of a new Fluid Container on the Azure service.
|
|
83
|
+
*
|
|
84
|
+
* @param endpointUrl - URI to the Azure Fluid Relay service discovery endpoint.
|
|
85
|
+
* @param tenantId - Unique tenant identifier.
|
|
86
|
+
*/
|
|
80
87
|
const createAzureCreateNewRequest = (endpointUrl, tenantId) => {
|
|
81
88
|
const url = new URL(endpointUrl);
|
|
82
89
|
url.searchParams.append("storage", encodeURIComponent(endpointUrl));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureUrlResolver.js","sourceRoot":"","sources":["../src/AzureUrlResolver.ts"],"names":[],"mappings":";;;AAKA,2EAK4C;AAE5C;;;;;;GAMG;AACH,MAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"AzureUrlResolver.js","sourceRoot":"","sources":["../src/AzureUrlResolver.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 */\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport {\n\tDriverHeader,\n\tIFluidResolvedUrl,\n\tIResolvedUrl,\n\tIUrlResolver,\n} from \"@fluidframework/driver-definitions\";\n\n/**\n * Implementation of {@link @fluidframework/driver-definitions#IUrlResolver} to resolve documents stored using the\n * Azure Fluid Relay based off of the orderer and storage URLs provide.\n *\n * @remarks The token provider here can be an `InsecureTokenProvider` for basic scenarios or more robust, secure\n * providers that fulfill the {@link @fluidframework/routerlicious-driver#ITokenProvider} interface.\n */\nexport class AzureUrlResolver implements IUrlResolver {\n\tpublic constructor() {}\n\n\tpublic async resolve(request: IRequest): Promise<IFluidResolvedUrl> {\n\t\tconst { ordererUrl, storageUrl, tenantId, containerId } = decodeAzureUrl(request.url);\n\t\t// determine whether the request is for creating of a new container.\n\t\t// such request has the `createNew` header set to true and doesn't have a container ID.\n\t\tif (request.headers && request.headers[DriverHeader.createNew] === true) {\n\t\t\treturn {\n\t\t\t\tendpoints: {\n\t\t\t\t\tdeltaStorageUrl: `${ordererUrl}/deltas/${tenantId}/new`,\n\t\t\t\t\tordererUrl,\n\t\t\t\t\tstorageUrl: `${storageUrl}/repos/${tenantId}`,\n\t\t\t\t},\n\t\t\t\t// id is a mandatory attribute, but it's ignored by the driver for new container requests.\n\t\t\t\tid: \"\",\n\t\t\t\t// tokens attribute is redundant as all tokens are generated via ITokenProvider\n\t\t\t\ttokens: {},\n\t\t\t\ttype: \"fluid\",\n\t\t\t\turl: `${ordererUrl}/${tenantId}/new`,\n\t\t\t};\n\t\t}\n\t\tif (containerId === undefined) {\n\t\t\tthrow new Error(\"Azure URL did not contain containerId\");\n\t\t}\n\t\tconst documentUrl = `${ordererUrl}/${tenantId}/${containerId}`;\n\t\treturn {\n\t\t\tendpoints: {\n\t\t\t\tdeltaStorageUrl: `${ordererUrl}/deltas/${tenantId}/${containerId}`,\n\t\t\t\tordererUrl,\n\t\t\t\tstorageUrl: `${storageUrl}/repos/${tenantId}`,\n\t\t\t},\n\t\t\tid: containerId,\n\t\t\ttokens: {},\n\t\t\ttype: \"fluid\",\n\t\t\turl: documentUrl,\n\t\t};\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tif (resolvedUrl.type !== \"fluid\") {\n\t\t\tthrow new Error(\"Invalid Resolved Url\");\n\t\t}\n\t\treturn `${resolvedUrl.url}/${relativeUrl}`;\n\t}\n}\n\nfunction decodeAzureUrl(urlString: string): {\n\tordererUrl: string;\n\tstorageUrl: string;\n\ttenantId: string;\n\tcontainerId?: string;\n} {\n\tconst url = new URL(urlString);\n\tconst ordererUrl = url.origin;\n\tconst searchParams = url.searchParams;\n\tconst storageUrl = searchParams.get(\"storage\");\n\tif (storageUrl === null) {\n\t\tthrow new Error(\"Azure URL did not contain a storage URL\");\n\t}\n\tconst tenantId = searchParams.get(\"tenantId\");\n\tif (tenantId === null) {\n\t\tthrow new Error(\"Azure URL did not contain a tenant ID\");\n\t}\n\tconst storageUrlDecoded = decodeURIComponent(storageUrl);\n\tconst tenantIdDecoded = decodeURIComponent(tenantId);\n\tconst containerId = searchParams.get(\"containerId\");\n\tconst containerIdDecoded = containerId !== null ? decodeURIComponent(containerId) : undefined;\n\treturn {\n\t\tordererUrl,\n\t\tstorageUrl: storageUrlDecoded,\n\t\ttenantId: tenantIdDecoded,\n\t\tcontainerId: containerIdDecoded,\n\t};\n}\n\n/**\n * Creates a request object that can be passed to {@link @fluidframework/fluid-static#IFluidContainer.attach} to\n * request creation of a new Fluid Container on the Azure service.\n *\n * @param endpointUrl - URI to the Azure Fluid Relay service discovery endpoint.\n * @param tenantId - Unique tenant identifier.\n */\nexport const createAzureCreateNewRequest = (endpointUrl: string, tenantId: string): IRequest => {\n\tconst url = new URL(endpointUrl);\n\turl.searchParams.append(\"storage\", encodeURIComponent(endpointUrl));\n\turl.searchParams.append(\"tenantId\", encodeURIComponent(tenantId));\n\treturn {\n\t\turl: url.href,\n\t\theaders: {\n\t\t\t[DriverHeader.createNew]: true,\n\t\t},\n\t};\n};\n"]}
|
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;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,WAAW,EACX,2BAA2B,EAC3B,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AAEH,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,2EAA0E;AAAjE,wIAAA,0BAA0B,OAAA;AAkBnC,6EAAsF;AAAxD,iHAAA,SAAS,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * A simple and powerful way to consume collaborative Fluid data with the Azure Fluid Relay.\n *\n * @packageDocumentation\n */\n\nexport { AzureAudience } from \"./AzureAudience\";\nexport { AzureClient } from \"./AzureClient\";\nexport { AzureFunctionTokenProvider } from \"./AzureFunctionTokenProvider\";\nexport {\n
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AAEH,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,2EAA0E;AAAjE,wIAAA,0BAA0B,OAAA;AAkBnC,6EAAsF;AAAxD,iHAAA,SAAS,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * A simple and powerful way to consume collaborative Fluid data with the Azure Fluid Relay.\n *\n * @packageDocumentation\n */\n\nexport { AzureAudience } from \"./AzureAudience\";\nexport { AzureClient } from \"./AzureClient\";\nexport { AzureFunctionTokenProvider } from \"./AzureFunctionTokenProvider\";\nexport {\n\tAzureClientProps,\n\tAzureConnectionConfig,\n\tAzureConnectionConfigType,\n\tAzureContainerServices,\n\tAzureContainerVersion,\n\tAzureGetVersionsOptions,\n\tAzureLocalConnectionConfig,\n\tAzureMember,\n\tAzureRemoteConnectionConfig,\n\tAzureUser,\n\tIAzureAudience,\n\tITelemetryBaseEvent,\n\tITelemetryBaseLogger,\n} from \"./interfaces\";\n\nexport { ITokenProvider, ITokenResponse } from \"@fluidframework/routerlicious-driver\";\nexport { ITokenClaims, IUser, ScopeType } from \"@fluidframework/protocol-definitions\";\n"]}
|
package/dist/interfaces.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { ITelemetryBaseLogger } from "@fluidframework/common-definitions";
|
|
|
6
6
|
import { IMember, IServiceAudience } from "@fluidframework/fluid-static";
|
|
7
7
|
import { IUser } from "@fluidframework/protocol-definitions";
|
|
8
8
|
import { ITokenProvider } from "@fluidframework/routerlicious-driver";
|
|
9
|
+
import { IConfigProviderBase } from "@fluidframework/telemetry-utils";
|
|
9
10
|
export { ITelemetryBaseEvent, ITelemetryBaseLogger } from "@fluidframework/common-definitions";
|
|
10
11
|
/**
|
|
11
12
|
* Props for initializing a new AzureClient instance
|
|
@@ -19,6 +20,10 @@ export interface AzureClientProps {
|
|
|
19
20
|
* Optional. A logger instance to receive diagnostic messages.
|
|
20
21
|
*/
|
|
21
22
|
readonly logger?: ITelemetryBaseLogger;
|
|
23
|
+
/**
|
|
24
|
+
* Base interface for providing configurations to control experimental features. If unsure, leave this undefined.
|
|
25
|
+
*/
|
|
26
|
+
readonly configProvider?: IConfigProviderBase;
|
|
22
27
|
}
|
|
23
28
|
/**
|
|
24
29
|
* Container version metadata.
|
package/dist/interfaces.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/F;;GAEG;AACH,MAAM,WAAW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,2BAA2B,GAAG,0BAA0B,CAAC;IAC9E;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,oBAAY,yBAAyB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,IAAI,EAAE,yBAAyB,CAAC;IAChC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,aAAa,EAAE,cAAc,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACzE;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,qBAAqB;IACxE;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;CACd;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACtC;;;OAGG;IACH,QAAQ,EAAE,cAAc,CAAC;CACzB;AAED;;;;;;;GAOG;AAGH,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,KAAK;IAChD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,CAAC;CACtB;AAED;;;;;;;;GAQG;AAGH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,OAAO;IACpD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,oBAAY,cAAc,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC"}
|