@fluidframework/azure-client 2.0.0-dev-rc.3.0.0.250606 → 2.0.0-dev-rc.3.0.0.254274

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AzureAudience.d.ts","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,CAU9E"}
1
+ {"version":3,"file":"AzureAudience.d.ts","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,CAU9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureAudience.js","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,cAAuB;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;IACjC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO;QACN,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,WAAW,EAAE,EAAE;QACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KACzC,CAAC;AACH,CAAC;AAVD,8DAUC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAW;IACrC,MAAM,cAAc,GAAG,IAA0B,CAAC;IAClD,MAAM,WAAW,GAAG,4CAA4C,CAAC;IACjE,IAAI,cAAc,CAAC,EAAE,KAAK,SAAS,EAAE;QACpC,MAAM,IAAI,SAAS,CAAC,GAAG,WAAW,kCAAkC,CAAC,CAAC;KACtE;IACD,6FAA6F;IAC7F,2CAA2C;IAC3C,4EAA4E;IAC5E,IAAI;AACL,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { type IClient, type IUser } from \"@fluidframework/protocol-definitions\";\nimport { type AzureMember, type AzureUser } from \"./interfaces.js\";\n\n/**\n * Creates Azure-specific audience member.\n *\n * @remarks\n * The provided `audienceMember`'s {@link @fluidframework/protocol-definitions#IClient.user} must be an {@link AzureUser}.\n */\nexport function createAzureAudienceMember(audienceMember: IClient): AzureMember {\n\tconst user = audienceMember.user;\n\tassertIsAzureUser(user);\n\n\treturn {\n\t\tuserId: user.id,\n\t\tuserName: user.name,\n\t\tconnections: [],\n\t\tadditionalDetails: user.additionalDetails,\n\t};\n}\n\n/**\n * Asserts that the provided {@link @fluidframework/protocol-definitions#IUser} is an {@link AzureUser}.\n */\nfunction assertIsAzureUser(user: IUser): asserts user is AzureUser<unknown> {\n\tconst maybeAzureUser = user as Partial<AzureUser>;\n\tconst baseMessage = 'Provided user data was not an \"AzureUser\".';\n\tif (maybeAzureUser.id === undefined) {\n\t\tthrow new TypeError(`${baseMessage} Missing required \"id\" property.`);\n\t}\n\t// AB#7448 to reenable this check. Disabling to mitigate a bug that the name may be missing.\n\t// if (maybeAzureUser.name === undefined) {\n\t// \tthrow new TypeError(`${baseMessage} Missing required \"name\" property.`);\n\t// }\n}\n"]}
1
+ {"version":3,"file":"AzureAudience.js","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAMH;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,cAAuB;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;IACjC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO;QACN,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,WAAW,EAAE,EAAE;QACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KACzC,CAAC;AACH,CAAC;AAVD,8DAUC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAW;IACrC,MAAM,cAAc,GAAG,IAA0B,CAAC;IAClD,MAAM,WAAW,GAAG,4CAA4C,CAAC;IACjE,IAAI,cAAc,CAAC,EAAE,KAAK,SAAS,EAAE;QACpC,MAAM,IAAI,SAAS,CAAC,GAAG,WAAW,kCAAkC,CAAC,CAAC;KACtE;IACD,6FAA6F;IAC7F,2CAA2C;IAC3C,4EAA4E;IAC5E,IAAI;AACL,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { type IClient, type IUser } from \"@fluidframework/protocol-definitions\";\n\nimport { type AzureMember, type AzureUser } from \"./interfaces.js\";\n\n/**\n * Creates Azure-specific audience member.\n *\n * @remarks\n * The provided `audienceMember`'s {@link @fluidframework/protocol-definitions#IClient.user} must be an {@link AzureUser}.\n */\nexport function createAzureAudienceMember(audienceMember: IClient): AzureMember {\n\tconst user = audienceMember.user;\n\tassertIsAzureUser(user);\n\n\treturn {\n\t\tuserId: user.id,\n\t\tuserName: user.name,\n\t\tconnections: [],\n\t\tadditionalDetails: user.additionalDetails,\n\t};\n}\n\n/**\n * Asserts that the provided {@link @fluidframework/protocol-definitions#IUser} is an {@link AzureUser}.\n */\nfunction assertIsAzureUser(user: IUser): asserts user is AzureUser<unknown> {\n\tconst maybeAzureUser = user as Partial<AzureUser>;\n\tconst baseMessage = 'Provided user data was not an \"AzureUser\".';\n\tif (maybeAzureUser.id === undefined) {\n\t\tthrow new TypeError(`${baseMessage} Missing required \"id\" property.`);\n\t}\n\t// AB#7448 to reenable this check. Disabling to mitigate a bug that the name may be missing.\n\t// if (maybeAzureUser.name === undefined) {\n\t// \tthrow new TypeError(`${baseMessage} Missing required \"name\" property.`);\n\t// }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureClient.d.ts","sourceRoot":"","sources":["../src/AzureClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,eAAe,EAKpB,MAAM,8BAA8B,CAAC;AAStC,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,MAAM,iBAAiB,CAAC;AA+CzB;;;;GAIG;AACH,qBAAa,WAAW;IASJ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAR9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA0B;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE;;;OAGG;gBACiC,UAAU,EAAE,gBAAgB;IAoBhE;;;;;;OAMG;IACU,eAAe,CAAC,KAAK,CAAC,gBAAgB,SAAS,eAAe,EAC1E,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAgBF;;;;;;;;;OASG;IACU,aAAa,CAAC,gBAAgB,SAAS,eAAe,EAClE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,EACjC,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAoCF;;;;;;;OAOG;IACU,YAAY,CAAC,gBAAgB,SAAS,eAAe,EACjE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAmBF;;;;;;OAMG;IACU,oBAAoB,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA0BnC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,YAAY;YA8BN,oBAAoB;YAgCpB,sBAAsB;CASpC"}
1
+ {"version":3,"file":"AzureClient.d.ts","sourceRoot":"","sources":["../src/AzureClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAa1F,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,MAAM,iBAAiB,CAAC;AA+CzB;;;;GAIG;AACH,qBAAa,WAAW;IASJ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAR9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA0B;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE;;;OAGG;gBACiC,UAAU,EAAE,gBAAgB;IAoBhE;;;;;;OAMG;IACU,eAAe,CAAC,KAAK,CAAC,gBAAgB,SAAS,eAAe,EAC1E,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAgBF;;;;;;;;;OASG;IACU,aAAa,CAAC,gBAAgB,SAAS,eAAe,EAClE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,EACjC,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAoCF;;;;;;;OAOG;IACU,YAAY,CAAC,gBAAgB,SAAS,eAAe,EACjE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAmBF;;;;;;OAMG;IACU,oBAAoB,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA0BnC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,YAAY;YA8BN,oBAAoB;YAiCpB,sBAAsB;CASpC"}
@@ -6,13 +6,13 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.AzureClient = void 0;
8
8
  const container_definitions_1 = require("@fluidframework/container-definitions");
9
- const container_loader_1 = require("@fluidframework/container-loader");
10
- const driver_utils_1 = require("@fluidframework/driver-utils");
11
- const fluid_static_1 = require("@fluidframework/fluid-static");
9
+ const internal_1 = require("@fluidframework/container-loader/internal");
10
+ const internal_2 = require("@fluidframework/core-utils/internal");
11
+ const internal_3 = require("@fluidframework/driver-utils/internal");
12
+ const internal_4 = require("@fluidframework/fluid-static/internal");
12
13
  const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
13
- const routerlicious_driver_1 = require("@fluidframework/routerlicious-driver");
14
- const core_utils_1 = require("@fluidframework/core-utils");
15
- const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
14
+ const internal_5 = require("@fluidframework/routerlicious-driver/internal");
15
+ const internal_6 = require("@fluidframework/telemetry-utils/internal");
16
16
  const AzureAudience_js_1 = require("./AzureAudience.js");
17
17
  const AzureUrlResolver_js_1 = require("./AzureUrlResolver.js");
18
18
  const utils_js_1 = require("./utils.js");
@@ -53,7 +53,7 @@ function wrapConfigProvider(baseConfigProvider) {
53
53
  ...azureClientFeatureGates,
54
54
  ...azureClientV1CompatFeatureGates,
55
55
  };
56
- return (0, telemetry_utils_1.wrapConfigProviderWithDefaults)(baseConfigProvider, defaults);
56
+ return (0, internal_6.wrapConfigProviderWithDefaults)(baseConfigProvider, defaults);
57
57
  }
58
58
  /**
59
59
  * AzureClient provides the ability to have a Fluid object backed by the Azure Fluid Relay or,
@@ -73,11 +73,11 @@ class AzureClient {
73
73
  // The local service implementation differs from the Azure Fluid Relay in blob
74
74
  // storage format. Azure Fluid Relay supports whole summary upload. Local currently does not.
75
75
  const isRemoteConnection = (0, utils_js_1.isAzureRemoteConnectionConfig)(this.properties.connection);
76
- const origDocumentServiceFactory = new routerlicious_driver_1.RouterliciousDocumentServiceFactory(this.properties.connection.tokenProvider, {
76
+ const origDocumentServiceFactory = new internal_5.RouterliciousDocumentServiceFactory(this.properties.connection.tokenProvider, {
77
77
  enableWholeSummaryUpload: isRemoteConnection,
78
78
  enableDiscovery: isRemoteConnection,
79
79
  });
80
- this.documentServiceFactory = (0, driver_utils_1.applyStorageCompression)(origDocumentServiceFactory, properties.summaryCompression);
80
+ this.documentServiceFactory = (0, internal_3.applyStorageCompression)(origDocumentServiceFactory, properties.summaryCompression);
81
81
  this.configProvider = wrapConfigProvider(properties.configProvider);
82
82
  }
83
83
  /**
@@ -146,7 +146,7 @@ class AzureClient {
146
146
  url.searchParams.append("containerId", encodeURIComponent(id));
147
147
  const container = await loader.resolve({ url: url.href });
148
148
  const rootDataObject = await this.getContainerEntryPoint(container);
149
- const fluidContainer = (0, fluid_static_1.createFluidContainer)({
149
+ const fluidContainer = (0, internal_4.createFluidContainer)({
150
150
  container,
151
151
  rootDataObject,
152
152
  });
@@ -180,14 +180,14 @@ class AzureClient {
180
180
  }
181
181
  getContainerServices(container) {
182
182
  return {
183
- audience: (0, fluid_static_1.createServiceAudience)({
183
+ audience: (0, internal_4.createServiceAudience)({
184
184
  container,
185
185
  createServiceMember: AzureAudience_js_1.createAzureAudienceMember,
186
186
  }),
187
187
  };
188
188
  }
189
189
  createLoader(schema) {
190
- const runtimeFactory = (0, fluid_static_1.createDOProviderContainerRuntimeFactory)({ schema });
190
+ const runtimeFactory = (0, internal_4.createDOProviderContainerRuntimeFactory)({ schema });
191
191
  const load = async () => {
192
192
  return {
193
193
  module: { fluidExport: runtimeFactory },
@@ -204,7 +204,7 @@ class AzureClient {
204
204
  user: { id: "" },
205
205
  mode: "write",
206
206
  };
207
- return new container_loader_1.Loader({
207
+ return new internal_1.Loader({
208
208
  urlResolver: this.urlResolver,
209
209
  documentServiceFactory: this.documentServiceFactory,
210
210
  codeLoader,
@@ -220,6 +220,7 @@ class AzureClient {
220
220
  * See {@link FluidContainer.attach}
221
221
  */
222
222
  const attach = async () => {
223
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- AB#7608
223
224
  if (container.attachState !== container_definitions_1.AttachState.Detached) {
224
225
  throw new Error("Cannot attach container. Container is not in detached state");
225
226
  }
@@ -229,7 +230,7 @@ class AzureClient {
229
230
  }
230
231
  return container.resolvedUrl.id;
231
232
  };
232
- const fluidContainer = (0, fluid_static_1.createFluidContainer)({
233
+ const fluidContainer = (0, internal_4.createFluidContainer)({
233
234
  container,
234
235
  rootDataObject,
235
236
  });
@@ -238,7 +239,7 @@ class AzureClient {
238
239
  }
239
240
  async getContainerEntryPoint(container) {
240
241
  const rootDataObject = await container.getEntryPoint();
241
- (0, core_utils_1.assert)(rootDataObject.IRootDataObject !== undefined, 0x90a /* entryPoint must be of type IRootDataObject */);
242
+ (0, internal_2.assert)(rootDataObject.IRootDataObject !== undefined, 0x90a /* entryPoint must be of type IRootDataObject */);
242
243
  return rootDataObject.IRootDataObject;
243
244
  }
244
245
  }
@@ -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 */\n\nimport {\n\tAttachState,\n\ttype IContainer,\n\ttype IFluidModuleWithDetails,\n} from \"@fluidframework/container-definitions\";\nimport { Loader } from \"@fluidframework/container-loader\";\nimport {\n\ttype IDocumentServiceFactory,\n\ttype IUrlResolver,\n} from \"@fluidframework/driver-definitions\";\nimport { applyStorageCompression } from \"@fluidframework/driver-utils\";\nimport {\n\ttype ContainerSchema,\n\ttype IFluidContainer,\n\ttype IRootDataObject,\n\tcreateDOProviderContainerRuntimeFactory,\n\tcreateFluidContainer,\n\tcreateServiceAudience,\n} from \"@fluidframework/fluid-static\";\nimport { type IClient, SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { RouterliciousDocumentServiceFactory } from \"@fluidframework/routerlicious-driver\";\n\nimport { type FluidObject, type IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { wrapConfigProviderWithDefaults } from \"@fluidframework/telemetry-utils\";\nimport { createAzureAudienceMember } from \"./AzureAudience.js\";\nimport { AzureUrlResolver, createAzureCreateNewRequest } from \"./AzureUrlResolver.js\";\nimport {\n\ttype AzureClientProps,\n\ttype AzureConnectionConfig,\n\ttype AzureContainerServices,\n\ttype AzureContainerVersion,\n\ttype AzureGetVersionsOptions,\n} from \"./interfaces.js\";\nimport { isAzureRemoteConnectionConfig } from \"./utils.js\";\n\n/**\n * Strongly typed id for connecting to a local Azure Fluid Relay.\n */\nconst LOCAL_MODE_TENANT_ID = \"local\";\nconst getTenantId = (connectionProperties: AzureConnectionConfig): string => {\n\treturn isAzureRemoteConnectionConfig(connectionProperties)\n\t\t? connectionProperties.tenantId\n\t\t: LOCAL_MODE_TENANT_ID;\n};\n\nconst MAX_VERSION_COUNT = 5;\n\n/**\n * Default feature gates.\n * These values will only be used if the feature gate is not already set by the supplied config provider.\n */\nconst azureClientFeatureGates = {\n\t// Azure client requires a write connection by default\n\t\"Fluid.Container.ForceWriteConnection\": true,\n};\n\n/**\n * Feature gates required to support runtime compatibility when V1 and V2 clients are collaborating\n */\nconst azureClientV1CompatFeatureGates = {\n\t// Disable Garbage Collection\n\t\"Fluid.GarbageCollection.RunSweep\": false, // To prevent the GC op\n\t\"Fluid.GarbageCollection.DisableAutoRecovery\": true, // To prevent the GC op\n\t\"Fluid.GarbageCollection.ThrowOnTombstoneLoadOverride\": false, // For a consistent story of \"GC is disabled\"\n};\n\n/**\n * Wrap the config provider to fall back on the appropriate defaults for Azure Client.\n * @param baseConfigProvider - The base config provider to wrap\n * @returns A new config provider with the appropriate defaults applied underneath the given provider\n */\nfunction wrapConfigProvider(baseConfigProvider?: IConfigProviderBase): IConfigProviderBase {\n\tconst defaults = {\n\t\t...azureClientFeatureGates,\n\t\t...azureClientV1CompatFeatureGates,\n\t};\n\treturn wrapConfigProviderWithDefaults(baseConfigProvider, defaults);\n}\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 * @public\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 properties - Properties for initializing a new AzureClient instance\n\t */\n\tpublic constructor(private readonly properties: AzureClientProps) {\n\t\t// remove trailing slash from URL if any\n\t\tproperties.connection.endpoint = properties.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.properties.connection);\n\t\tconst origDocumentServiceFactory: IDocumentServiceFactory =\n\t\t\tnew RouterliciousDocumentServiceFactory(this.properties.connection.tokenProvider, {\n\t\t\t\tenableWholeSummaryUpload: isRemoteConnection,\n\t\t\t\tenableDiscovery: isRemoteConnection,\n\t\t\t});\n\n\t\tthis.documentServiceFactory = applyStorageCompression(\n\t\t\torigDocumentServiceFactory,\n\t\t\tproperties.summaryCompression,\n\t\t);\n\t\tthis.configProvider = wrapConfigProvider(properties.configProvider);\n\t}\n\n\t/**\n\t * Creates a new detached container instance in the Azure Fluid Relay.\n\t * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<const TContainerSchema extends ContainerSchema>(\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t\tversion?: AzureContainerVersion,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\n\t\turl.searchParams.append(\"containerId\", encodeURIComponent(id));\n\t\tconst container = await loader.resolve({ url: url.href });\n\t\tconst rootDataObject = await this.getContainerEntryPoint(container);\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\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 retrieve 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.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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 =\n\t\t\tawait this.documentServiceFactory.createDocumentService(resolvedUrl);\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: createServiceAudience({\n\t\t\t\tcontainer,\n\t\t\t\tcreateServiceMember: createAzureAudienceMember,\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate createLoader(schema: ContainerSchema): Loader {\n\t\tconst runtimeFactory = createDOProviderContainerRuntimeFactory({ schema });\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.properties.logger,\n\t\t\toptions: { client },\n\t\t\tconfigProvider: this.configProvider,\n\t\t});\n\t}\n\n\tprivate async createFluidContainer<TContainerSchema extends ContainerSchema>(\n\t\tcontainer: IContainer,\n\t\tconnection: AzureConnectionConfig,\n\t): Promise<IFluidContainer<TContainerSchema>> {\n\t\tconst createNewRequest = createAzureCreateNewRequest(\n\t\t\tconnection.endpoint,\n\t\t\tgetTenantId(connection),\n\t\t);\n\n\t\tconst rootDataObject = await this.getContainerEntryPoint(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\tif (container.resolvedUrl === undefined) {\n\t\t\t\tthrow new Error(\"Resolved Url not available on attached container\");\n\t\t\t}\n\t\t\treturn container.resolvedUrl.id;\n\t\t};\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\n\t\tfluidContainer.attach = attach;\n\t\treturn fluidContainer;\n\t}\n\n\tprivate async getContainerEntryPoint(container: IContainer): Promise<IRootDataObject> {\n\t\tconst rootDataObject: FluidObject<IRootDataObject> = await container.getEntryPoint();\n\t\tassert(\n\t\t\trootDataObject.IRootDataObject !== undefined,\n\t\t\t0x90a /* entryPoint must be of type IRootDataObject */,\n\t\t);\n\t\treturn rootDataObject.IRootDataObject;\n\t}\n\t// #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 */\n\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport {\n\ttype IContainer,\n\ttype IFluidModuleWithDetails,\n} from \"@fluidframework/container-definitions/internal\";\nimport { Loader } from \"@fluidframework/container-loader/internal\";\nimport { type FluidObject, type IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\ttype IDocumentServiceFactory,\n\ttype IUrlResolver,\n} from \"@fluidframework/driver-definitions/internal\";\nimport { applyStorageCompression } from \"@fluidframework/driver-utils/internal\";\nimport { type ContainerSchema, type IFluidContainer } from \"@fluidframework/fluid-static\";\nimport {\n\ttype IRootDataObject,\n\tcreateDOProviderContainerRuntimeFactory,\n\tcreateFluidContainer,\n\tcreateServiceAudience,\n} from \"@fluidframework/fluid-static/internal\";\nimport { type IClient, SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { RouterliciousDocumentServiceFactory } from \"@fluidframework/routerlicious-driver/internal\";\nimport { wrapConfigProviderWithDefaults } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { createAzureAudienceMember } from \"./AzureAudience.js\";\nimport { AzureUrlResolver, createAzureCreateNewRequest } from \"./AzureUrlResolver.js\";\nimport {\n\ttype AzureClientProps,\n\ttype AzureConnectionConfig,\n\ttype AzureContainerServices,\n\ttype AzureContainerVersion,\n\ttype AzureGetVersionsOptions,\n} from \"./interfaces.js\";\nimport { isAzureRemoteConnectionConfig } from \"./utils.js\";\n\n/**\n * Strongly typed id for connecting to a local Azure Fluid Relay.\n */\nconst LOCAL_MODE_TENANT_ID = \"local\";\nconst getTenantId = (connectionProperties: AzureConnectionConfig): string => {\n\treturn isAzureRemoteConnectionConfig(connectionProperties)\n\t\t? connectionProperties.tenantId\n\t\t: LOCAL_MODE_TENANT_ID;\n};\n\nconst MAX_VERSION_COUNT = 5;\n\n/**\n * Default feature gates.\n * These values will only be used if the feature gate is not already set by the supplied config provider.\n */\nconst azureClientFeatureGates = {\n\t// Azure client requires a write connection by default\n\t\"Fluid.Container.ForceWriteConnection\": true,\n};\n\n/**\n * Feature gates required to support runtime compatibility when V1 and V2 clients are collaborating\n */\nconst azureClientV1CompatFeatureGates = {\n\t// Disable Garbage Collection\n\t\"Fluid.GarbageCollection.RunSweep\": false, // To prevent the GC op\n\t\"Fluid.GarbageCollection.DisableAutoRecovery\": true, // To prevent the GC op\n\t\"Fluid.GarbageCollection.ThrowOnTombstoneLoadOverride\": false, // For a consistent story of \"GC is disabled\"\n};\n\n/**\n * Wrap the config provider to fall back on the appropriate defaults for Azure Client.\n * @param baseConfigProvider - The base config provider to wrap\n * @returns A new config provider with the appropriate defaults applied underneath the given provider\n */\nfunction wrapConfigProvider(baseConfigProvider?: IConfigProviderBase): IConfigProviderBase {\n\tconst defaults = {\n\t\t...azureClientFeatureGates,\n\t\t...azureClientV1CompatFeatureGates,\n\t};\n\treturn wrapConfigProviderWithDefaults(baseConfigProvider, defaults);\n}\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 * @public\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 properties - Properties for initializing a new AzureClient instance\n\t */\n\tpublic constructor(private readonly properties: AzureClientProps) {\n\t\t// remove trailing slash from URL if any\n\t\tproperties.connection.endpoint = properties.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.properties.connection);\n\t\tconst origDocumentServiceFactory: IDocumentServiceFactory =\n\t\t\tnew RouterliciousDocumentServiceFactory(this.properties.connection.tokenProvider, {\n\t\t\t\tenableWholeSummaryUpload: isRemoteConnection,\n\t\t\t\tenableDiscovery: isRemoteConnection,\n\t\t\t});\n\n\t\tthis.documentServiceFactory = applyStorageCompression(\n\t\t\torigDocumentServiceFactory,\n\t\t\tproperties.summaryCompression,\n\t\t);\n\t\tthis.configProvider = wrapConfigProvider(properties.configProvider);\n\t}\n\n\t/**\n\t * Creates a new detached container instance in the Azure Fluid Relay.\n\t * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<const TContainerSchema extends ContainerSchema>(\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t\tversion?: AzureContainerVersion,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\n\t\turl.searchParams.append(\"containerId\", encodeURIComponent(id));\n\t\tconst container = await loader.resolve({ url: url.href });\n\t\tconst rootDataObject = await this.getContainerEntryPoint(container);\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\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 retrieve 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.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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 =\n\t\t\tawait this.documentServiceFactory.createDocumentService(resolvedUrl);\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: createServiceAudience({\n\t\t\t\tcontainer,\n\t\t\t\tcreateServiceMember: createAzureAudienceMember,\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate createLoader(schema: ContainerSchema): Loader {\n\t\tconst runtimeFactory = createDOProviderContainerRuntimeFactory({ schema });\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.properties.logger,\n\t\t\toptions: { client },\n\t\t\tconfigProvider: this.configProvider,\n\t\t});\n\t}\n\n\tprivate async createFluidContainer<TContainerSchema extends ContainerSchema>(\n\t\tcontainer: IContainer,\n\t\tconnection: AzureConnectionConfig,\n\t): Promise<IFluidContainer<TContainerSchema>> {\n\t\tconst createNewRequest = createAzureCreateNewRequest(\n\t\t\tconnection.endpoint,\n\t\t\tgetTenantId(connection),\n\t\t);\n\n\t\tconst rootDataObject = await this.getContainerEntryPoint(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\t// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- AB#7608\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\tif (container.resolvedUrl === undefined) {\n\t\t\t\tthrow new Error(\"Resolved Url not available on attached container\");\n\t\t\t}\n\t\t\treturn container.resolvedUrl.id;\n\t\t};\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\n\t\tfluidContainer.attach = attach;\n\t\treturn fluidContainer;\n\t}\n\n\tprivate async getContainerEntryPoint(container: IContainer): Promise<IRootDataObject> {\n\t\tconst rootDataObject: FluidObject<IRootDataObject> = await container.getEntryPoint();\n\t\tassert(\n\t\t\trootDataObject.IRootDataObject !== undefined,\n\t\t\t0x90a /* entryPoint must be of type IRootDataObject */,\n\t\t);\n\t\treturn rootDataObject.IRootDataObject;\n\t}\n\t// #endregion\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureFunctionTokenProvider.d.ts","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEhG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;GAQG;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"}
1
+ {"version":3,"file":"AzureFunctionTokenProvider.d.ts","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGhG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;GAQG;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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureFunctionTokenProvider.js","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,kDAA0B;AAM1B;;;;;;;;GAQG;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,IAAI,CAAC,IAAI,EAAE,MAAM;gBACzB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ;gBAC7B,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,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 */\n\nimport axios from \"axios\";\n\nimport { type ITokenProvider, type ITokenResponse } from \"@fluidframework/routerlicious-driver\";\n\nimport { type AzureMember } from \"./interfaces.js\";\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 * @internal\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"]}
1
+ {"version":3,"file":"AzureFunctionTokenProvider.js","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAGH,kDAA0B;AAI1B;;;;;;;;GAQG;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,IAAI,CAAC,IAAI,EAAE,MAAM;gBACzB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ;gBAC7B,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,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 */\n\nimport { type ITokenProvider, type ITokenResponse } from \"@fluidframework/routerlicious-driver\";\nimport axios from \"axios\";\n\nimport { type AzureMember } from \"./interfaces.js\";\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 * @internal\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"]}
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { type IRequest } from "@fluidframework/core-interfaces";
6
- import { type IResolvedUrl, type IUrlResolver } from "@fluidframework/driver-definitions";
6
+ import { type IResolvedUrl, type IUrlResolver } from "@fluidframework/driver-definitions/internal";
7
7
  /**
8
8
  * Implementation of {@link @fluidframework/driver-definitions#IUrlResolver} to resolve documents stored using the
9
9
  * Azure Fluid Relay based off of the orderer and storage URLs provide.
@@ -1 +1 @@
1
- {"version":3,"file":"AzureUrlResolver.d.ts","sourceRoot":"","sources":["../src/AzureUrlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,MAAM,oCAAoC,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,YAAY;;IAGvC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCjD,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"}
1
+ {"version":3,"file":"AzureUrlResolver.d.ts","sourceRoot":"","sources":["../src/AzureUrlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,MAAM,6CAA6C,CAAC;AAErD;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,YAAY;;IAGvC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCjD,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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.createAzureCreateNewRequest = exports.AzureUrlResolver = void 0;
8
- const driver_definitions_1 = require("@fluidframework/driver-definitions");
8
+ const internal_1 = require("@fluidframework/driver-definitions/internal");
9
9
  /**
10
10
  * Implementation of {@link @fluidframework/driver-definitions#IUrlResolver} to resolve documents stored using the
11
11
  * Azure Fluid Relay based off of the orderer and storage URLs provide.
@@ -19,7 +19,7 @@ class AzureUrlResolver {
19
19
  const { ordererUrl, storageUrl, tenantId, containerId } = decodeAzureUrl(request.url);
20
20
  // determine whether the request is for creating of a new container.
21
21
  // such request has the `createNew` header set to true and doesn't have a container ID.
22
- if (request.headers && request.headers[driver_definitions_1.DriverHeader.createNew] === true) {
22
+ if (request.headers && request.headers[internal_1.DriverHeader.createNew] === true) {
23
23
  return {
24
24
  endpoints: {
25
25
  deltaStorageUrl: `${ordererUrl}/deltas/${tenantId}/new`,
@@ -95,7 +95,7 @@ const createAzureCreateNewRequest = (endpointUrl, tenantId) => {
95
95
  return {
96
96
  url: url.href,
97
97
  headers: {
98
- [driver_definitions_1.DriverHeader.createNew]: true,
98
+ [internal_1.DriverHeader.createNew]: true,
99
99
  },
100
100
  };
101
101
  };
@@ -1 +1 @@
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 */\n\nimport { type IRequest } from \"@fluidframework/core-interfaces\";\nimport {\n\tDriverHeader,\n\ttype IResolvedUrl,\n\ttype IUrlResolver,\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<IResolvedUrl> {\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 searchParameters = url.searchParams;\n\tconst storageUrl = searchParameters.get(\"storage\");\n\tif (storageUrl === null) {\n\t\tthrow new Error(\"Azure URL did not contain a storage URL\");\n\t}\n\tconst tenantId = searchParameters.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 = searchParameters.get(\"containerId\");\n\tconst containerIdDecoded = containerId === null ? undefined : decodeURIComponent(containerId);\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"]}
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 */\n\nimport { type IRequest } from \"@fluidframework/core-interfaces\";\nimport {\n\tDriverHeader,\n\ttype IResolvedUrl,\n\ttype IUrlResolver,\n} from \"@fluidframework/driver-definitions/internal\";\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<IResolvedUrl> {\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 searchParameters = url.searchParams;\n\tconst storageUrl = searchParameters.get(\"storage\");\n\tif (storageUrl === null) {\n\t\tthrow new Error(\"Azure URL did not contain a storage URL\");\n\t}\n\tconst tenantId = searchParameters.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 = searchParameters.get(\"containerId\");\n\tconst containerIdDecoded = containerId === null ? undefined : decodeURIComponent(containerId);\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureAudience.d.ts","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,CAU9E"}
1
+ {"version":3,"file":"AzureAudience.d.ts","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,CAU9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureAudience.js","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,cAAuB;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;IACjC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO;QACN,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,WAAW,EAAE,EAAE;QACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAW;IACrC,MAAM,cAAc,GAAG,IAA0B,CAAC;IAClD,MAAM,WAAW,GAAG,4CAA4C,CAAC;IACjE,IAAI,cAAc,CAAC,EAAE,KAAK,SAAS,EAAE;QACpC,MAAM,IAAI,SAAS,CAAC,GAAG,WAAW,kCAAkC,CAAC,CAAC;KACtE;IACD,6FAA6F;IAC7F,2CAA2C;IAC3C,4EAA4E;IAC5E,IAAI;AACL,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { type IClient, type IUser } from \"@fluidframework/protocol-definitions\";\nimport { type AzureMember, type AzureUser } from \"./interfaces.js\";\n\n/**\n * Creates Azure-specific audience member.\n *\n * @remarks\n * The provided `audienceMember`'s {@link @fluidframework/protocol-definitions#IClient.user} must be an {@link AzureUser}.\n */\nexport function createAzureAudienceMember(audienceMember: IClient): AzureMember {\n\tconst user = audienceMember.user;\n\tassertIsAzureUser(user);\n\n\treturn {\n\t\tuserId: user.id,\n\t\tuserName: user.name,\n\t\tconnections: [],\n\t\tadditionalDetails: user.additionalDetails,\n\t};\n}\n\n/**\n * Asserts that the provided {@link @fluidframework/protocol-definitions#IUser} is an {@link AzureUser}.\n */\nfunction assertIsAzureUser(user: IUser): asserts user is AzureUser<unknown> {\n\tconst maybeAzureUser = user as Partial<AzureUser>;\n\tconst baseMessage = 'Provided user data was not an \"AzureUser\".';\n\tif (maybeAzureUser.id === undefined) {\n\t\tthrow new TypeError(`${baseMessage} Missing required \"id\" property.`);\n\t}\n\t// AB#7448 to reenable this check. Disabling to mitigate a bug that the name may be missing.\n\t// if (maybeAzureUser.name === undefined) {\n\t// \tthrow new TypeError(`${baseMessage} Missing required \"name\" property.`);\n\t// }\n}\n"]}
1
+ {"version":3,"file":"AzureAudience.js","sourceRoot":"","sources":["../src/AzureAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,cAAuB;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;IACjC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO;QACN,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,WAAW,EAAE,EAAE;QACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAW;IACrC,MAAM,cAAc,GAAG,IAA0B,CAAC;IAClD,MAAM,WAAW,GAAG,4CAA4C,CAAC;IACjE,IAAI,cAAc,CAAC,EAAE,KAAK,SAAS,EAAE;QACpC,MAAM,IAAI,SAAS,CAAC,GAAG,WAAW,kCAAkC,CAAC,CAAC;KACtE;IACD,6FAA6F;IAC7F,2CAA2C;IAC3C,4EAA4E;IAC5E,IAAI;AACL,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { type IClient, type IUser } from \"@fluidframework/protocol-definitions\";\n\nimport { type AzureMember, type AzureUser } from \"./interfaces.js\";\n\n/**\n * Creates Azure-specific audience member.\n *\n * @remarks\n * The provided `audienceMember`'s {@link @fluidframework/protocol-definitions#IClient.user} must be an {@link AzureUser}.\n */\nexport function createAzureAudienceMember(audienceMember: IClient): AzureMember {\n\tconst user = audienceMember.user;\n\tassertIsAzureUser(user);\n\n\treturn {\n\t\tuserId: user.id,\n\t\tuserName: user.name,\n\t\tconnections: [],\n\t\tadditionalDetails: user.additionalDetails,\n\t};\n}\n\n/**\n * Asserts that the provided {@link @fluidframework/protocol-definitions#IUser} is an {@link AzureUser}.\n */\nfunction assertIsAzureUser(user: IUser): asserts user is AzureUser<unknown> {\n\tconst maybeAzureUser = user as Partial<AzureUser>;\n\tconst baseMessage = 'Provided user data was not an \"AzureUser\".';\n\tif (maybeAzureUser.id === undefined) {\n\t\tthrow new TypeError(`${baseMessage} Missing required \"id\" property.`);\n\t}\n\t// AB#7448 to reenable this check. Disabling to mitigate a bug that the name may be missing.\n\t// if (maybeAzureUser.name === undefined) {\n\t// \tthrow new TypeError(`${baseMessage} Missing required \"name\" property.`);\n\t// }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureClient.d.ts","sourceRoot":"","sources":["../src/AzureClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,eAAe,EAKpB,MAAM,8BAA8B,CAAC;AAStC,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,MAAM,iBAAiB,CAAC;AA+CzB;;;;GAIG;AACH,qBAAa,WAAW;IASJ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAR9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA0B;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE;;;OAGG;gBACiC,UAAU,EAAE,gBAAgB;IAoBhE;;;;;;OAMG;IACU,eAAe,CAAC,KAAK,CAAC,gBAAgB,SAAS,eAAe,EAC1E,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAgBF;;;;;;;;;OASG;IACU,aAAa,CAAC,gBAAgB,SAAS,eAAe,EAClE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,EACjC,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAoCF;;;;;;;OAOG;IACU,YAAY,CAAC,gBAAgB,SAAS,eAAe,EACjE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAmBF;;;;;;OAMG;IACU,oBAAoB,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA0BnC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,YAAY;YA8BN,oBAAoB;YAgCpB,sBAAsB;CASpC"}
1
+ {"version":3,"file":"AzureClient.d.ts","sourceRoot":"","sources":["../src/AzureClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAa1F,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,MAAM,iBAAiB,CAAC;AA+CzB;;;;GAIG;AACH,qBAAa,WAAW;IASJ,OAAO,CAAC,QAAQ,CAAC,UAAU;IAR9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA0B;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE;;;OAGG;gBACiC,UAAU,EAAE,gBAAgB;IAoBhE;;;;;;OAMG;IACU,eAAe,CAAC,KAAK,CAAC,gBAAgB,SAAS,eAAe,EAC1E,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAgBF;;;;;;;;;OASG;IACU,aAAa,CAAC,gBAAgB,SAAS,eAAe,EAClE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,EACjC,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAoCF;;;;;;;OAOG;IACU,YAAY,CAAC,gBAAgB,SAAS,eAAe,EACjE,EAAE,EAAE,MAAM,EACV,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC;QACV,SAAS,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,EAAE,sBAAsB,CAAC;KACjC,CAAC;IAmBF;;;;;;OAMG;IACU,oBAAoB,CAChC,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA0BnC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,YAAY;YA8BN,oBAAoB;YAiCpB,sBAAsB;CASpC"}
@@ -2,14 +2,14 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { AttachState, } from "@fluidframework/container-definitions";
6
- import { Loader } from "@fluidframework/container-loader";
7
- import { applyStorageCompression } from "@fluidframework/driver-utils";
8
- import { createDOProviderContainerRuntimeFactory, createFluidContainer, createServiceAudience, } from "@fluidframework/fluid-static";
5
+ import { AttachState } from "@fluidframework/container-definitions";
6
+ import { Loader } from "@fluidframework/container-loader/internal";
7
+ import { assert } from "@fluidframework/core-utils/internal";
8
+ import { applyStorageCompression } from "@fluidframework/driver-utils/internal";
9
+ import { createDOProviderContainerRuntimeFactory, createFluidContainer, createServiceAudience, } from "@fluidframework/fluid-static/internal";
9
10
  import { SummaryType } from "@fluidframework/protocol-definitions";
10
- import { RouterliciousDocumentServiceFactory } from "@fluidframework/routerlicious-driver";
11
- import { assert } from "@fluidframework/core-utils";
12
- import { wrapConfigProviderWithDefaults } from "@fluidframework/telemetry-utils";
11
+ import { RouterliciousDocumentServiceFactory } from "@fluidframework/routerlicious-driver/internal";
12
+ import { wrapConfigProviderWithDefaults } from "@fluidframework/telemetry-utils/internal";
13
13
  import { createAzureAudienceMember } from "./AzureAudience.js";
14
14
  import { AzureUrlResolver, createAzureCreateNewRequest } from "./AzureUrlResolver.js";
15
15
  import { isAzureRemoteConnectionConfig } from "./utils.js";
@@ -217,6 +217,7 @@ export class AzureClient {
217
217
  * See {@link FluidContainer.attach}
218
218
  */
219
219
  const attach = async () => {
220
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- AB#7608
220
221
  if (container.attachState !== AttachState.Detached) {
221
222
  throw new Error("Cannot attach container. Container is not in detached state");
222
223
  }
@@ -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 */\n\nimport {\n\tAttachState,\n\ttype IContainer,\n\ttype IFluidModuleWithDetails,\n} from \"@fluidframework/container-definitions\";\nimport { Loader } from \"@fluidframework/container-loader\";\nimport {\n\ttype IDocumentServiceFactory,\n\ttype IUrlResolver,\n} from \"@fluidframework/driver-definitions\";\nimport { applyStorageCompression } from \"@fluidframework/driver-utils\";\nimport {\n\ttype ContainerSchema,\n\ttype IFluidContainer,\n\ttype IRootDataObject,\n\tcreateDOProviderContainerRuntimeFactory,\n\tcreateFluidContainer,\n\tcreateServiceAudience,\n} from \"@fluidframework/fluid-static\";\nimport { type IClient, SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { RouterliciousDocumentServiceFactory } from \"@fluidframework/routerlicious-driver\";\n\nimport { type FluidObject, type IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { wrapConfigProviderWithDefaults } from \"@fluidframework/telemetry-utils\";\nimport { createAzureAudienceMember } from \"./AzureAudience.js\";\nimport { AzureUrlResolver, createAzureCreateNewRequest } from \"./AzureUrlResolver.js\";\nimport {\n\ttype AzureClientProps,\n\ttype AzureConnectionConfig,\n\ttype AzureContainerServices,\n\ttype AzureContainerVersion,\n\ttype AzureGetVersionsOptions,\n} from \"./interfaces.js\";\nimport { isAzureRemoteConnectionConfig } from \"./utils.js\";\n\n/**\n * Strongly typed id for connecting to a local Azure Fluid Relay.\n */\nconst LOCAL_MODE_TENANT_ID = \"local\";\nconst getTenantId = (connectionProperties: AzureConnectionConfig): string => {\n\treturn isAzureRemoteConnectionConfig(connectionProperties)\n\t\t? connectionProperties.tenantId\n\t\t: LOCAL_MODE_TENANT_ID;\n};\n\nconst MAX_VERSION_COUNT = 5;\n\n/**\n * Default feature gates.\n * These values will only be used if the feature gate is not already set by the supplied config provider.\n */\nconst azureClientFeatureGates = {\n\t// Azure client requires a write connection by default\n\t\"Fluid.Container.ForceWriteConnection\": true,\n};\n\n/**\n * Feature gates required to support runtime compatibility when V1 and V2 clients are collaborating\n */\nconst azureClientV1CompatFeatureGates = {\n\t// Disable Garbage Collection\n\t\"Fluid.GarbageCollection.RunSweep\": false, // To prevent the GC op\n\t\"Fluid.GarbageCollection.DisableAutoRecovery\": true, // To prevent the GC op\n\t\"Fluid.GarbageCollection.ThrowOnTombstoneLoadOverride\": false, // For a consistent story of \"GC is disabled\"\n};\n\n/**\n * Wrap the config provider to fall back on the appropriate defaults for Azure Client.\n * @param baseConfigProvider - The base config provider to wrap\n * @returns A new config provider with the appropriate defaults applied underneath the given provider\n */\nfunction wrapConfigProvider(baseConfigProvider?: IConfigProviderBase): IConfigProviderBase {\n\tconst defaults = {\n\t\t...azureClientFeatureGates,\n\t\t...azureClientV1CompatFeatureGates,\n\t};\n\treturn wrapConfigProviderWithDefaults(baseConfigProvider, defaults);\n}\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 * @public\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 properties - Properties for initializing a new AzureClient instance\n\t */\n\tpublic constructor(private readonly properties: AzureClientProps) {\n\t\t// remove trailing slash from URL if any\n\t\tproperties.connection.endpoint = properties.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.properties.connection);\n\t\tconst origDocumentServiceFactory: IDocumentServiceFactory =\n\t\t\tnew RouterliciousDocumentServiceFactory(this.properties.connection.tokenProvider, {\n\t\t\t\tenableWholeSummaryUpload: isRemoteConnection,\n\t\t\t\tenableDiscovery: isRemoteConnection,\n\t\t\t});\n\n\t\tthis.documentServiceFactory = applyStorageCompression(\n\t\t\torigDocumentServiceFactory,\n\t\t\tproperties.summaryCompression,\n\t\t);\n\t\tthis.configProvider = wrapConfigProvider(properties.configProvider);\n\t}\n\n\t/**\n\t * Creates a new detached container instance in the Azure Fluid Relay.\n\t * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<const TContainerSchema extends ContainerSchema>(\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t\tversion?: AzureContainerVersion,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\n\t\turl.searchParams.append(\"containerId\", encodeURIComponent(id));\n\t\tconst container = await loader.resolve({ url: url.href });\n\t\tconst rootDataObject = await this.getContainerEntryPoint(container);\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\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 retrieve 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.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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 =\n\t\t\tawait this.documentServiceFactory.createDocumentService(resolvedUrl);\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: createServiceAudience({\n\t\t\t\tcontainer,\n\t\t\t\tcreateServiceMember: createAzureAudienceMember,\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate createLoader(schema: ContainerSchema): Loader {\n\t\tconst runtimeFactory = createDOProviderContainerRuntimeFactory({ schema });\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.properties.logger,\n\t\t\toptions: { client },\n\t\t\tconfigProvider: this.configProvider,\n\t\t});\n\t}\n\n\tprivate async createFluidContainer<TContainerSchema extends ContainerSchema>(\n\t\tcontainer: IContainer,\n\t\tconnection: AzureConnectionConfig,\n\t): Promise<IFluidContainer<TContainerSchema>> {\n\t\tconst createNewRequest = createAzureCreateNewRequest(\n\t\t\tconnection.endpoint,\n\t\t\tgetTenantId(connection),\n\t\t);\n\n\t\tconst rootDataObject = await this.getContainerEntryPoint(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\tif (container.resolvedUrl === undefined) {\n\t\t\t\tthrow new Error(\"Resolved Url not available on attached container\");\n\t\t\t}\n\t\t\treturn container.resolvedUrl.id;\n\t\t};\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\n\t\tfluidContainer.attach = attach;\n\t\treturn fluidContainer;\n\t}\n\n\tprivate async getContainerEntryPoint(container: IContainer): Promise<IRootDataObject> {\n\t\tconst rootDataObject: FluidObject<IRootDataObject> = await container.getEntryPoint();\n\t\tassert(\n\t\t\trootDataObject.IRootDataObject !== undefined,\n\t\t\t0x90a /* entryPoint must be of type IRootDataObject */,\n\t\t);\n\t\treturn rootDataObject.IRootDataObject;\n\t}\n\t// #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 */\n\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport {\n\ttype IContainer,\n\ttype IFluidModuleWithDetails,\n} from \"@fluidframework/container-definitions/internal\";\nimport { Loader } from \"@fluidframework/container-loader/internal\";\nimport { type FluidObject, type IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\ttype IDocumentServiceFactory,\n\ttype IUrlResolver,\n} from \"@fluidframework/driver-definitions/internal\";\nimport { applyStorageCompression } from \"@fluidframework/driver-utils/internal\";\nimport { type ContainerSchema, type IFluidContainer } from \"@fluidframework/fluid-static\";\nimport {\n\ttype IRootDataObject,\n\tcreateDOProviderContainerRuntimeFactory,\n\tcreateFluidContainer,\n\tcreateServiceAudience,\n} from \"@fluidframework/fluid-static/internal\";\nimport { type IClient, SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { RouterliciousDocumentServiceFactory } from \"@fluidframework/routerlicious-driver/internal\";\nimport { wrapConfigProviderWithDefaults } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { createAzureAudienceMember } from \"./AzureAudience.js\";\nimport { AzureUrlResolver, createAzureCreateNewRequest } from \"./AzureUrlResolver.js\";\nimport {\n\ttype AzureClientProps,\n\ttype AzureConnectionConfig,\n\ttype AzureContainerServices,\n\ttype AzureContainerVersion,\n\ttype AzureGetVersionsOptions,\n} from \"./interfaces.js\";\nimport { isAzureRemoteConnectionConfig } from \"./utils.js\";\n\n/**\n * Strongly typed id for connecting to a local Azure Fluid Relay.\n */\nconst LOCAL_MODE_TENANT_ID = \"local\";\nconst getTenantId = (connectionProperties: AzureConnectionConfig): string => {\n\treturn isAzureRemoteConnectionConfig(connectionProperties)\n\t\t? connectionProperties.tenantId\n\t\t: LOCAL_MODE_TENANT_ID;\n};\n\nconst MAX_VERSION_COUNT = 5;\n\n/**\n * Default feature gates.\n * These values will only be used if the feature gate is not already set by the supplied config provider.\n */\nconst azureClientFeatureGates = {\n\t// Azure client requires a write connection by default\n\t\"Fluid.Container.ForceWriteConnection\": true,\n};\n\n/**\n * Feature gates required to support runtime compatibility when V1 and V2 clients are collaborating\n */\nconst azureClientV1CompatFeatureGates = {\n\t// Disable Garbage Collection\n\t\"Fluid.GarbageCollection.RunSweep\": false, // To prevent the GC op\n\t\"Fluid.GarbageCollection.DisableAutoRecovery\": true, // To prevent the GC op\n\t\"Fluid.GarbageCollection.ThrowOnTombstoneLoadOverride\": false, // For a consistent story of \"GC is disabled\"\n};\n\n/**\n * Wrap the config provider to fall back on the appropriate defaults for Azure Client.\n * @param baseConfigProvider - The base config provider to wrap\n * @returns A new config provider with the appropriate defaults applied underneath the given provider\n */\nfunction wrapConfigProvider(baseConfigProvider?: IConfigProviderBase): IConfigProviderBase {\n\tconst defaults = {\n\t\t...azureClientFeatureGates,\n\t\t...azureClientV1CompatFeatureGates,\n\t};\n\treturn wrapConfigProviderWithDefaults(baseConfigProvider, defaults);\n}\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 * @public\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 properties - Properties for initializing a new AzureClient instance\n\t */\n\tpublic constructor(private readonly properties: AzureClientProps) {\n\t\t// remove trailing slash from URL if any\n\t\tproperties.connection.endpoint = properties.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.properties.connection);\n\t\tconst origDocumentServiceFactory: IDocumentServiceFactory =\n\t\t\tnew RouterliciousDocumentServiceFactory(this.properties.connection.tokenProvider, {\n\t\t\t\tenableWholeSummaryUpload: isRemoteConnection,\n\t\t\t\tenableDiscovery: isRemoteConnection,\n\t\t\t});\n\n\t\tthis.documentServiceFactory = applyStorageCompression(\n\t\t\torigDocumentServiceFactory,\n\t\t\tproperties.summaryCompression,\n\t\t);\n\t\tthis.configProvider = wrapConfigProvider(properties.configProvider);\n\t}\n\n\t/**\n\t * Creates a new detached container instance in the Azure Fluid Relay.\n\t * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<const TContainerSchema extends ContainerSchema>(\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t\tversion?: AzureContainerVersion,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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<TContainerSchema>(\n\t\t\tcontainer,\n\t\t\tthis.properties.connection,\n\t\t);\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 * @typeparam TContainerSchema - Used to infer the the type of 'initialObjects' in the returned container.\n\t * (normally not explicitly specified.)\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<TContainerSchema extends ContainerSchema>(\n\t\tid: string,\n\t\tcontainerSchema: TContainerSchema,\n\t): Promise<{\n\t\tcontainer: IFluidContainer<TContainerSchema>;\n\t\tservices: AzureContainerServices;\n\t}> {\n\t\tconst loader = this.createLoader(containerSchema);\n\t\tconst url = new URL(this.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\n\t\turl.searchParams.append(\"containerId\", encodeURIComponent(id));\n\t\tconst container = await loader.resolve({ url: url.href });\n\t\tconst rootDataObject = await this.getContainerEntryPoint(container);\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\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 retrieve 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.properties.connection.endpoint);\n\t\turl.searchParams.append(\"storage\", encodeURIComponent(this.properties.connection.endpoint));\n\t\turl.searchParams.append(\n\t\t\t\"tenantId\",\n\t\t\tencodeURIComponent(getTenantId(this.properties.connection)),\n\t\t);\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 =\n\t\t\tawait this.documentServiceFactory.createDocumentService(resolvedUrl);\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: createServiceAudience({\n\t\t\t\tcontainer,\n\t\t\t\tcreateServiceMember: createAzureAudienceMember,\n\t\t\t}),\n\t\t};\n\t}\n\n\tprivate createLoader(schema: ContainerSchema): Loader {\n\t\tconst runtimeFactory = createDOProviderContainerRuntimeFactory({ schema });\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.properties.logger,\n\t\t\toptions: { client },\n\t\t\tconfigProvider: this.configProvider,\n\t\t});\n\t}\n\n\tprivate async createFluidContainer<TContainerSchema extends ContainerSchema>(\n\t\tcontainer: IContainer,\n\t\tconnection: AzureConnectionConfig,\n\t): Promise<IFluidContainer<TContainerSchema>> {\n\t\tconst createNewRequest = createAzureCreateNewRequest(\n\t\t\tconnection.endpoint,\n\t\t\tgetTenantId(connection),\n\t\t);\n\n\t\tconst rootDataObject = await this.getContainerEntryPoint(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\t// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- AB#7608\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\tif (container.resolvedUrl === undefined) {\n\t\t\t\tthrow new Error(\"Resolved Url not available on attached container\");\n\t\t\t}\n\t\t\treturn container.resolvedUrl.id;\n\t\t};\n\t\tconst fluidContainer = createFluidContainer<TContainerSchema>({\n\t\t\tcontainer,\n\t\t\trootDataObject,\n\t\t});\n\t\tfluidContainer.attach = attach;\n\t\treturn fluidContainer;\n\t}\n\n\tprivate async getContainerEntryPoint(container: IContainer): Promise<IRootDataObject> {\n\t\tconst rootDataObject: FluidObject<IRootDataObject> = await container.getEntryPoint();\n\t\tassert(\n\t\t\trootDataObject.IRootDataObject !== undefined,\n\t\t\t0x90a /* entryPoint must be of type IRootDataObject */,\n\t\t);\n\t\treturn rootDataObject.IRootDataObject;\n\t}\n\t// #endregion\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureFunctionTokenProvider.d.ts","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEhG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;GAQG;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"}
1
+ {"version":3,"file":"AzureFunctionTokenProvider.d.ts","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGhG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;GAQG;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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AzureFunctionTokenProvider.js","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B;;;;;;;;GAQG;AACH,MAAM,OAAO,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,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;YACpD,MAAM,EAAE;gBACP,QAAQ;gBACR,UAAU;gBACV,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM;gBACzB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ;gBAC7B,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,iBAA4B;aAC1D;SACD,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAc,CAAC;IAChC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport axios from \"axios\";\n\nimport { type ITokenProvider, type ITokenResponse } from \"@fluidframework/routerlicious-driver\";\n\nimport { type AzureMember } from \"./interfaces.js\";\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 * @internal\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"]}
1
+ {"version":3,"file":"AzureFunctionTokenProvider.js","sourceRoot":"","sources":["../src/AzureFunctionTokenProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;;;;;;;GAQG;AACH,MAAM,OAAO,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,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;YACpD,MAAM,EAAE;gBACP,QAAQ;gBACR,UAAU;gBACV,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM;gBACzB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ;gBAC7B,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,iBAA4B;aAC1D;SACD,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAc,CAAC;IAChC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { type ITokenProvider, type ITokenResponse } from \"@fluidframework/routerlicious-driver\";\nimport axios from \"axios\";\n\nimport { type AzureMember } from \"./interfaces.js\";\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 * @internal\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"]}
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { type IRequest } from "@fluidframework/core-interfaces";
6
- import { type IResolvedUrl, type IUrlResolver } from "@fluidframework/driver-definitions";
6
+ import { type IResolvedUrl, type IUrlResolver } from "@fluidframework/driver-definitions/internal";
7
7
  /**
8
8
  * Implementation of {@link @fluidframework/driver-definitions#IUrlResolver} to resolve documents stored using the
9
9
  * Azure Fluid Relay based off of the orderer and storage URLs provide.
@@ -1 +1 @@
1
- {"version":3,"file":"AzureUrlResolver.d.ts","sourceRoot":"","sources":["../src/AzureUrlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,MAAM,oCAAoC,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,YAAY;;IAGvC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCjD,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"}
1
+ {"version":3,"file":"AzureUrlResolver.d.ts","sourceRoot":"","sources":["../src/AzureUrlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,MAAM,6CAA6C,CAAC;AAErD;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,YAAY;;IAGvC,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCjD,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"}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { DriverHeader, } from "@fluidframework/driver-definitions";
5
+ import { DriverHeader, } from "@fluidframework/driver-definitions/internal";
6
6
  /**
7
7
  * Implementation of {@link @fluidframework/driver-definitions#IUrlResolver} to resolve documents stored using the
8
8
  * Azure Fluid Relay based off of the orderer and storage URLs provide.
@@ -1 +1 @@
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 */\n\nimport { type IRequest } from \"@fluidframework/core-interfaces\";\nimport {\n\tDriverHeader,\n\ttype IResolvedUrl,\n\ttype IUrlResolver,\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<IResolvedUrl> {\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 searchParameters = url.searchParams;\n\tconst storageUrl = searchParameters.get(\"storage\");\n\tif (storageUrl === null) {\n\t\tthrow new Error(\"Azure URL did not contain a storage URL\");\n\t}\n\tconst tenantId = searchParameters.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 = searchParameters.get(\"containerId\");\n\tconst containerIdDecoded = containerId === null ? undefined : decodeURIComponent(containerId);\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"]}
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 */\n\nimport { type IRequest } from \"@fluidframework/core-interfaces\";\nimport {\n\tDriverHeader,\n\ttype IResolvedUrl,\n\ttype IUrlResolver,\n} from \"@fluidframework/driver-definitions/internal\";\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<IResolvedUrl> {\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 searchParameters = url.searchParams;\n\tconst storageUrl = searchParameters.get(\"storage\");\n\tif (storageUrl === null) {\n\t\tthrow new Error(\"Azure URL did not contain a storage URL\");\n\t}\n\tconst tenantId = searchParameters.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 = searchParameters.get(\"containerId\");\n\tconst containerIdDecoded = containerId === null ? undefined : decodeURIComponent(containerId);\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"]}
@@ -0,0 +1,11 @@
1
+ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
+ // It should be published with your NPM package. It should not be tracked by Git.
3
+ {
4
+ "tsdocVersion": "0.12",
5
+ "toolPackages": [
6
+ {
7
+ "packageName": "@microsoft/api-extractor",
8
+ "packageVersion": "7.42.3"
9
+ }
10
+ ]
11
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/azure-client",
3
- "version": "2.0.0-dev-rc.3.0.0.250606",
3
+ "version": "2.0.0-dev-rc.3.0.0.254274",
4
4
  "description": "A tool to enable creation and loading of Fluid containers using the Azure Fluid Relay service",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -14,16 +14,6 @@
14
14
  "type": "module",
15
15
  "exports": {
16
16
  ".": {
17
- "import": {
18
- "types": "./lib/index.d.ts",
19
- "default": "./lib/index.js"
20
- },
21
- "require": {
22
- "types": "./dist/index.d.ts",
23
- "default": "./dist/index.js"
24
- }
25
- },
26
- "./public": {
27
17
  "import": {
28
18
  "types": "./lib/azure-client-public.d.ts",
29
19
  "default": "./lib/index.js"
@@ -65,35 +55,35 @@
65
55
  }
66
56
  },
67
57
  "main": "dist/index.js",
68
- "types": "dist/index.d.ts",
58
+ "types": "./dist/azure-client-public.d.ts",
69
59
  "dependencies": {
70
- "@fluidframework/container-definitions": "2.0.0-dev-rc.3.0.0.250606",
71
- "@fluidframework/container-loader": "2.0.0-dev-rc.3.0.0.250606",
72
- "@fluidframework/core-interfaces": "2.0.0-dev-rc.3.0.0.250606",
73
- "@fluidframework/core-utils": "2.0.0-dev-rc.3.0.0.250606",
74
- "@fluidframework/driver-definitions": "2.0.0-dev-rc.3.0.0.250606",
75
- "@fluidframework/driver-utils": "2.0.0-dev-rc.3.0.0.250606",
76
- "@fluidframework/fluid-static": "2.0.0-dev-rc.3.0.0.250606",
77
- "@fluidframework/map": "2.0.0-dev-rc.3.0.0.250606",
60
+ "@fluidframework/container-definitions": "2.0.0-dev-rc.3.0.0.254274",
61
+ "@fluidframework/container-loader": "2.0.0-dev-rc.3.0.0.254274",
62
+ "@fluidframework/core-interfaces": "2.0.0-dev-rc.3.0.0.254274",
63
+ "@fluidframework/core-utils": "2.0.0-dev-rc.3.0.0.254274",
64
+ "@fluidframework/driver-definitions": "2.0.0-dev-rc.3.0.0.254274",
65
+ "@fluidframework/driver-utils": "2.0.0-dev-rc.3.0.0.254274",
66
+ "@fluidframework/fluid-static": "2.0.0-dev-rc.3.0.0.254274",
67
+ "@fluidframework/map": "2.0.0-dev-rc.3.0.0.254274",
78
68
  "@fluidframework/protocol-definitions": "^3.2.0",
79
- "@fluidframework/routerlicious-driver": "2.0.0-dev-rc.3.0.0.250606",
80
- "@fluidframework/runtime-utils": "2.0.0-dev-rc.3.0.0.250606",
81
- "@fluidframework/telemetry-utils": "2.0.0-dev-rc.3.0.0.250606",
69
+ "@fluidframework/routerlicious-driver": "2.0.0-dev-rc.3.0.0.254274",
70
+ "@fluidframework/runtime-utils": "2.0.0-dev-rc.3.0.0.254274",
71
+ "@fluidframework/telemetry-utils": "2.0.0-dev-rc.3.0.0.254274",
82
72
  "axios": "^1.6.2"
83
73
  },
84
74
  "devDependencies": {
85
- "@arethetypeswrong/cli": "^0.13.3",
75
+ "@arethetypeswrong/cli": "^0.15.2",
86
76
  "@biomejs/biome": "^1.6.2",
87
77
  "@fluid-tools/build-cli": "^0.34.0",
88
- "@fluidframework/aqueduct": "2.0.0-dev-rc.3.0.0.250606",
78
+ "@fluidframework/aqueduct": "2.0.0-dev-rc.3.0.0.254274",
89
79
  "@fluidframework/azure-client-previous": "npm:@fluidframework/azure-client@2.0.0-internal.8.0.0",
90
- "@fluidframework/azure-local-service": "2.0.0-dev-rc.3.0.0.250606",
80
+ "@fluidframework/azure-local-service": "2.0.0-dev-rc.3.0.0.254274",
91
81
  "@fluidframework/build-common": "^2.0.3",
92
82
  "@fluidframework/build-tools": "^0.34.0",
93
83
  "@fluidframework/eslint-config-fluid": "^5.1.0",
94
- "@fluidframework/test-runtime-utils": "2.0.0-dev-rc.3.0.0.250606",
95
- "@fluidframework/test-utils": "2.0.0-dev-rc.3.0.0.250606",
96
- "@fluidframework/tree": "2.0.0-dev-rc.3.0.0.250606",
84
+ "@fluidframework/test-runtime-utils": "2.0.0-dev-rc.3.0.0.254274",
85
+ "@fluidframework/test-utils": "2.0.0-dev-rc.3.0.0.254274",
86
+ "@fluidframework/tree": "2.0.0-dev-rc.3.0.0.254274",
97
87
  "@microsoft/api-extractor": "^7.42.3",
98
88
  "@types/mocha": "^9.1.1",
99
89
  "@types/node": "^18.19.0",
@@ -137,7 +127,6 @@
137
127
  "build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
138
128
  "build:test:esm": "tsc --project ./src/test/tsconfig.json",
139
129
  "check:are-the-types-wrong": "attw --pack . --entrypoints .",
140
- "check:biome": "biome check .",
141
130
  "check:prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
142
131
  "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
143
132
  "ci:build:docs": "api-extractor run",
@@ -145,7 +134,6 @@
145
134
  "eslint": "eslint --format stylish src",
146
135
  "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
147
136
  "format": "fluid-build --task format .",
148
- "format:biome": "biome check --apply .",
149
137
  "format:prettier": "prettier --write . --cache --ignore-path ../../../.prettierignore",
150
138
  "lint": "fluid-build . --task lint",
151
139
  "lint:fix": "fluid-build . --task eslint:fix --task format",
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import { type IClient, type IUser } from "@fluidframework/protocol-definitions";
7
+
7
8
  import { type AzureMember, type AzureUser } from "./interfaces.js";
8
9
 
9
10
  /**
@@ -3,31 +3,30 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import { AttachState } from "@fluidframework/container-definitions";
6
7
  import {
7
- AttachState,
8
8
  type IContainer,
9
9
  type IFluidModuleWithDetails,
10
- } from "@fluidframework/container-definitions";
11
- import { Loader } from "@fluidframework/container-loader";
10
+ } from "@fluidframework/container-definitions/internal";
11
+ import { Loader } from "@fluidframework/container-loader/internal";
12
+ import { type FluidObject, type IConfigProviderBase } from "@fluidframework/core-interfaces";
13
+ import { assert } from "@fluidframework/core-utils/internal";
12
14
  import {
13
15
  type IDocumentServiceFactory,
14
16
  type IUrlResolver,
15
- } from "@fluidframework/driver-definitions";
16
- import { applyStorageCompression } from "@fluidframework/driver-utils";
17
+ } from "@fluidframework/driver-definitions/internal";
18
+ import { applyStorageCompression } from "@fluidframework/driver-utils/internal";
19
+ import { type ContainerSchema, type IFluidContainer } from "@fluidframework/fluid-static";
17
20
  import {
18
- type ContainerSchema,
19
- type IFluidContainer,
20
21
  type IRootDataObject,
21
22
  createDOProviderContainerRuntimeFactory,
22
23
  createFluidContainer,
23
24
  createServiceAudience,
24
- } from "@fluidframework/fluid-static";
25
+ } from "@fluidframework/fluid-static/internal";
25
26
  import { type IClient, SummaryType } from "@fluidframework/protocol-definitions";
26
- import { RouterliciousDocumentServiceFactory } from "@fluidframework/routerlicious-driver";
27
+ import { RouterliciousDocumentServiceFactory } from "@fluidframework/routerlicious-driver/internal";
28
+ import { wrapConfigProviderWithDefaults } from "@fluidframework/telemetry-utils/internal";
27
29
 
28
- import { type FluidObject, type IConfigProviderBase } from "@fluidframework/core-interfaces";
29
- import { assert } from "@fluidframework/core-utils";
30
- import { wrapConfigProviderWithDefaults } from "@fluidframework/telemetry-utils";
31
30
  import { createAzureAudienceMember } from "./AzureAudience.js";
32
31
  import { AzureUrlResolver, createAzureCreateNewRequest } from "./AzureUrlResolver.js";
33
32
  import {
@@ -321,6 +320,7 @@ export class AzureClient {
321
320
  * See {@link FluidContainer.attach}
322
321
  */
323
322
  const attach = async (): Promise<string> => {
323
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- AB#7608
324
324
  if (container.attachState !== AttachState.Detached) {
325
325
  throw new Error("Cannot attach container. Container is not in detached state");
326
326
  }
@@ -3,9 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import axios from "axios";
7
-
8
6
  import { type ITokenProvider, type ITokenResponse } from "@fluidframework/routerlicious-driver";
7
+ import axios from "axios";
9
8
 
10
9
  import { type AzureMember } from "./interfaces.js";
11
10
 
@@ -8,7 +8,7 @@ import {
8
8
  DriverHeader,
9
9
  type IResolvedUrl,
10
10
  type IUrlResolver,
11
- } from "@fluidframework/driver-definitions";
11
+ } from "@fluidframework/driver-definitions/internal";
12
12
 
13
13
  /**
14
14
  * Implementation of {@link @fluidframework/driver-definitions#IUrlResolver} to resolve documents stored using the
@@ -1,228 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { strict as assert } from "node:assert";
6
- import { AttachState } from "@fluidframework/container-definitions";
7
- import { SharedMap } from "@fluidframework/map";
8
- import { ScopeType } from "@fluidframework/protocol-definitions";
9
- import { InsecureTokenProvider } from "@fluidframework/test-runtime-utils";
10
- import { timeoutPromise } from "@fluidframework/test-utils";
11
- import { SchemaFactory, SharedTree } from "@fluidframework/tree";
12
- import { v4 as uuid } from "uuid";
13
- import { ConnectionState } from "@fluidframework/container-loader";
14
- import { AzureClient } from "../AzureClient.js";
15
- function createAzureClient(props = {}) {
16
- const connectionProperties = {
17
- tokenProvider: new InsecureTokenProvider("fooBar", {
18
- id: uuid(),
19
- name: uuid(),
20
- }, props.scopes),
21
- endpoint: "http://localhost:7070",
22
- type: "local",
23
- };
24
- return new AzureClient({
25
- connection: connectionProperties,
26
- configProvider: props.configProvider,
27
- });
28
- }
29
- const connectionModeOf = (container) =>
30
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
31
- container.container.connectionMode;
32
- describe("AzureClient", () => {
33
- const connectTimeoutMs = 1000;
34
- let client;
35
- let schema;
36
- beforeEach("createAzureClient", () => {
37
- client = createAzureClient();
38
- schema = {
39
- initialObjects: {
40
- map1: SharedMap,
41
- },
42
- };
43
- });
44
- /**
45
- * Scenario: test when Azure Client is instantiated correctly, it can create
46
- * a container successfully.
47
- *
48
- * Expected behavior: an error should not be thrown nor should a rejected promise
49
- * be returned.
50
- */
51
- it("can create new Azure Fluid Relay container successfully", async () => {
52
- const resourcesP = client.createContainer(schema);
53
- await assert.doesNotReject(resourcesP, () => true, "container cannot be created in Azure Fluid Relay");
54
- });
55
- /**
56
- * Scenario: test when an Azure Client container is created,
57
- * it is initially detached.
58
- *
59
- * Expected behavior: an error should not be thrown nor should a rejected promise
60
- * be returned.
61
- */
62
- it("created container is detached", async () => {
63
- const { container } = await client.createContainer(schema);
64
- assert.strictEqual(container.attachState, AttachState.Detached, "Container should be detached");
65
- });
66
- /**
67
- * Scenario: Test attaching a container.
68
- *
69
- * Expected behavior: an error should not be thrown nor should a rejected promise
70
- * be returned.
71
- */
72
- it("can attach a container", async () => {
73
- const { container } = await client.createContainer(schema);
74
- const containerId = await container.attach();
75
- if (container.connectionState !== ConnectionState.Connected) {
76
- await timeoutPromise((resolve) => container.once("connected", () => resolve()), {
77
- durationMs: connectTimeoutMs,
78
- errorMsg: "container connect() timeout",
79
- });
80
- }
81
- assert.strictEqual(typeof containerId, "string", "Attach did not return a string ID");
82
- assert.strictEqual(container.attachState, AttachState.Attached, "Container is not attached after attach is called");
83
- });
84
- /**
85
- * Scenario: Test if attaching a container twice fails.
86
- *
87
- * Expected behavior: an error should not be thrown nor should a rejected promise
88
- * be returned.
89
- */
90
- it("cannot attach a container twice", async () => {
91
- const { container } = await client.createContainer(schema);
92
- const containerId = await container.attach();
93
- if (container.connectionState !== ConnectionState.Connected) {
94
- await timeoutPromise((resolve) => container.once("connected", () => resolve()), {
95
- durationMs: connectTimeoutMs,
96
- errorMsg: "container connect() timeout",
97
- });
98
- }
99
- assert.strictEqual(typeof containerId, "string", "Attach did not return a string ID");
100
- assert.strictEqual(container.attachState, AttachState.Attached, "Container is attached after attach is called");
101
- await assert.rejects(container.attach(), () => true, "Container should not attach twice");
102
- });
103
- /**
104
- * Scenario: test if Azure Client can get an existing container.
105
- *
106
- * Expected behavior: an error should not be thrown nor should a rejected promise
107
- * be returned.
108
- */
109
- it("can retrieve existing Azure Fluid Relay container successfully", async () => {
110
- const { container: newContainer } = await client.createContainer(schema);
111
- const containerId = await newContainer.attach();
112
- if (newContainer.connectionState !== ConnectionState.Connected) {
113
- await timeoutPromise((resolve) => newContainer.once("connected", () => resolve()), {
114
- durationMs: connectTimeoutMs,
115
- errorMsg: "container connect() timeout",
116
- });
117
- }
118
- const resources = client.getContainer(containerId, schema);
119
- await assert.doesNotReject(resources, () => true, "container cannot be retrieved from Azure Fluid Relay");
120
- });
121
- /**
122
- * Scenario: test if Azure Client can get a non-exiting container.
123
- *
124
- * Expected behavior: an error should be thrown when trying to get a non-existent container.
125
- */
126
- it("cannot load improperly created container (cannot load a non-existent container)", async () => {
127
- const consoleErrorFunction = console.error;
128
- console.error = () => { };
129
- const containerAndServicesP = client.getContainer("containerConfig", schema);
130
- const errorFunction = (error) => {
131
- assert.notStrictEqual(error.message, undefined, "Azure Client error is undefined");
132
- return true;
133
- };
134
- await assert.rejects(containerAndServicesP, errorFunction, "Azure Client can load a non-existent container");
135
- // eslint-disable-next-line require-atomic-updates
136
- console.error = consoleErrorFunction;
137
- });
138
- /**
139
- * Scenario: Test if AzureClient with only read permission starts the container in read mode.
140
- * AzureClient will attempt to start the connection in write mode, and since access permissions
141
- * does not offer write capabilities, the established connection mode will be `read`.
142
- *
143
- * Expected behavior: AzureClient should start the container with the connectionMode in `read`.
144
- */
145
- it("can create a container with only read permission in read mode", async () => {
146
- const readOnlyAzureClient = createAzureClient({ scopes: [ScopeType.DocRead] });
147
- const { container } = await readOnlyAzureClient.createContainer(schema);
148
- const containerId = await container.attach();
149
- await timeoutPromise((resolve) => container.once("connected", resolve), {
150
- durationMs: 1000,
151
- errorMsg: "container connect() timeout",
152
- });
153
- const { container: containerGet } = await readOnlyAzureClient.getContainer(containerId, schema);
154
- assert.strictEqual(connectionModeOf(container), "read", "Creating a container with only read permission is not in read mode");
155
- assert.strictEqual(connectionModeOf(containerGet), "read", "Getting a container with only read permission is not in read mode");
156
- });
157
- /**
158
- * Scenario: Test if AzureClient with read and write permissions starts the container in write mode.
159
- * AzureClient will attempt to start the connection in write mode, and since access permissions offer
160
- * write capability, the established connection mode will be `write`.
161
- *
162
- * Expected behavior: AzureClient should start the container with the connectionMode in `write`.
163
- */
164
- it("can create a container with read and write permissions in write mode", async () => {
165
- const readWriteAzureClient = createAzureClient({
166
- scopes: [ScopeType.DocRead, ScopeType.DocWrite],
167
- });
168
- const { container } = await readWriteAzureClient.createContainer(schema);
169
- const containerId = await container.attach();
170
- await timeoutPromise((resolve) => container.once("connected", resolve), {
171
- durationMs: 1000,
172
- errorMsg: "container connect() timeout",
173
- });
174
- const { container: containerGet } = await readWriteAzureClient.getContainer(containerId, schema);
175
- assert.strictEqual(connectionModeOf(container), "write", "Creating a container with only write permission is not in write mode");
176
- assert.strictEqual(connectionModeOf(containerGet), "write", "Getting a container with only write permission is not in write mode");
177
- });
178
- it("GC is disabled by default, but can be enabled", async () => {
179
- const { container: container_defaultConfig } = await client.createContainer(schema);
180
- assert.strictEqual(container_defaultConfig.container.mc.config.getBoolean("Fluid.GarbageCollection.RunSweep"), false, "Expected GC to be disabled per configs set in constructor");
181
- const client_gcEnabled = createAzureClient({
182
- configProvider: {
183
- getRawConfig: (name) => ({ "Fluid.GarbageCollection.RunSweep": true })[name],
184
- },
185
- });
186
- const { container: container_gcEnabled } = await client_gcEnabled.createContainer(schema);
187
- assert.strictEqual(container_gcEnabled.container.mc.config.getBoolean("Fluid.GarbageCollection.RunSweep"), true, "Expected GC to be able to enable GC via config provider");
188
- });
189
- /**
190
- * Scenario: Ensure that the types of 'initialObjects' are preserved when the container
191
- * schema type is statically known.
192
- */
193
- describe("'initialObjects'", () => {
194
- it("preserves 'SharedMap' type", async () => {
195
- const { container } = await client.createContainer({
196
- initialObjects: {
197
- map: SharedMap,
198
- },
199
- });
200
- // Ensure that the 'map' API is accessible without casting or suppressing lint rules:
201
- assert.equal(container.initialObjects.map.get("nonexistent"), undefined);
202
- });
203
- it("preserves 'SharedTree' type", async () => {
204
- const { container } = await client.createContainer({
205
- initialObjects: {
206
- tree: SharedTree,
207
- },
208
- });
209
- // Ensure that the 'tree' API is accessible without casting or suppressing lint rules:
210
- const tree = container.initialObjects.tree;
211
- // Apply Schema to returned SharedTree.
212
- const _ = new SchemaFactory("test");
213
- class RootNode extends _.object("Root", {
214
- itWorks: _.string,
215
- }) {
216
- }
217
- const view = tree.schematize({
218
- schema: RootNode,
219
- initialTree: () => new RootNode({
220
- itWorks: "yes",
221
- }),
222
- });
223
- // Ensure root node is correctly typed.
224
- assert.equal(view.root.itWorks, "yes");
225
- });
226
- });
227
- });
228
- //# sourceMappingURL=AzureClient.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AzureClient.spec.js","sourceRoot":"","sources":["../../src/test/AzureClient.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 \"node:assert\";\n\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { type ContainerSchema, type IFluidContainer } from \"@fluidframework/fluid-static\";\nimport { SharedMap } from \"@fluidframework/map\";\nimport { type ConnectionMode, ScopeType } from \"@fluidframework/protocol-definitions\";\nimport type { MonitoringContext } from \"@fluidframework/telemetry-utils\";\nimport { InsecureTokenProvider } from \"@fluidframework/test-runtime-utils\";\nimport { timeoutPromise } from \"@fluidframework/test-utils\";\nimport { SchemaFactory, SharedTree } from \"@fluidframework/tree\";\n\nimport { v4 as uuid } from \"uuid\";\n\nimport { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport { AzureClient } from \"../AzureClient.js\";\nimport { type AzureLocalConnectionConfig } from \"../interfaces.js\";\n\nfunction createAzureClient(\n\tprops: {\n\t\tscopes?: ScopeType[];\n\t\tconfigProvider?: IConfigProviderBase;\n\t} = {},\n): AzureClient {\n\tconst connectionProperties: AzureLocalConnectionConfig = {\n\t\ttokenProvider: new InsecureTokenProvider(\n\t\t\t\"fooBar\",\n\t\t\t{\n\t\t\t\tid: uuid(),\n\t\t\t\tname: uuid(),\n\t\t\t},\n\t\t\tprops.scopes,\n\t\t),\n\t\tendpoint: \"http://localhost:7070\",\n\t\ttype: \"local\",\n\t};\n\treturn new AzureClient({\n\t\tconnection: connectionProperties,\n\t\tconfigProvider: props.configProvider,\n\t});\n}\n\nconst connectionModeOf = (container: IFluidContainer): ConnectionMode =>\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t(container as any).container.connectionMode as ConnectionMode;\n\ndescribe(\"AzureClient\", () => {\n\tconst connectTimeoutMs = 1000;\n\tlet client: AzureClient;\n\tlet schema: ContainerSchema;\n\n\tbeforeEach(\"createAzureClient\", () => {\n\t\tclient = createAzureClient();\n\t\tschema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t};\n\t});\n\n\t/**\n\t * Scenario: test when Azure Client is instantiated correctly, it can create\n\t * a container successfully.\n\t *\n\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t * be returned.\n\t */\n\tit(\"can create new Azure Fluid Relay container successfully\", async () => {\n\t\tconst resourcesP = client.createContainer(schema);\n\n\t\tawait assert.doesNotReject(\n\t\t\tresourcesP,\n\t\t\t() => true,\n\t\t\t\"container cannot be created in Azure Fluid Relay\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test when an Azure Client container is created,\n\t * it is initially detached.\n\t *\n\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t * be returned.\n\t */\n\tit(\"created container is detached\", async () => {\n\t\tconst { container } = await client.createContainer(schema);\n\t\tassert.strictEqual(\n\t\t\tcontainer.attachState,\n\t\t\tAttachState.Detached,\n\t\t\t\"Container should be detached\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: Test attaching a container.\n\t *\n\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t * be returned.\n\t */\n\tit(\"can attach a container\", async () => {\n\t\tconst { container } = await client.createContainer(schema);\n\t\tconst containerId = await container.attach();\n\n\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t});\n\t\t}\n\n\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\tassert.strictEqual(\n\t\t\tcontainer.attachState,\n\t\t\tAttachState.Attached,\n\t\t\t\"Container is not attached after attach is called\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: Test if attaching a container twice fails.\n\t *\n\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t * be returned.\n\t */\n\tit(\"cannot attach a container twice\", async () => {\n\t\tconst { container } = await client.createContainer(schema);\n\t\tconst containerId = await container.attach();\n\n\t\tif (container.connectionState !== ConnectionState.Connected) {\n\t\t\tawait timeoutPromise((resolve) => container.once(\"connected\", () => resolve()), {\n\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t});\n\t\t}\n\n\t\tassert.strictEqual(typeof containerId, \"string\", \"Attach did not return a string ID\");\n\t\tassert.strictEqual(\n\t\t\tcontainer.attachState,\n\t\t\tAttachState.Attached,\n\t\t\t\"Container is attached after attach is called\",\n\t\t);\n\t\tawait assert.rejects(container.attach(), () => true, \"Container should not attach twice\");\n\t});\n\n\t/**\n\t * Scenario: test if Azure Client can get an existing container.\n\t *\n\t * Expected behavior: an error should not be thrown nor should a rejected promise\n\t * be returned.\n\t */\n\tit(\"can retrieve existing Azure Fluid Relay container successfully\", async () => {\n\t\tconst { container: newContainer } = await client.createContainer(schema);\n\t\tconst containerId = await newContainer.attach();\n\n\t\tif (newContainer.connectionState !== ConnectionState.Connected) {\n\t\t\tawait timeoutPromise((resolve) => newContainer.once(\"connected\", () => resolve()), {\n\t\t\t\tdurationMs: connectTimeoutMs,\n\t\t\t\terrorMsg: \"container connect() timeout\",\n\t\t\t});\n\t\t}\n\n\t\tconst resources = client.getContainer(containerId, schema);\n\t\tawait assert.doesNotReject(\n\t\t\tresources,\n\t\t\t() => true,\n\t\t\t\"container cannot be retrieved from Azure Fluid Relay\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if Azure Client can get a non-exiting container.\n\t *\n\t * Expected behavior: an error should be thrown when trying to get a non-existent container.\n\t */\n\tit(\"cannot load improperly created container (cannot load a non-existent container)\", async () => {\n\t\tconst consoleErrorFunction = console.error;\n\t\tconsole.error = (): void => {};\n\t\tconst containerAndServicesP = client.getContainer(\"containerConfig\", schema);\n\n\t\tconst errorFunction = (error: Error): boolean => {\n\t\t\tassert.notStrictEqual(error.message, undefined, \"Azure Client error is undefined\");\n\t\t\treturn true;\n\t\t};\n\n\t\tawait assert.rejects(\n\t\t\tcontainerAndServicesP,\n\t\t\terrorFunction,\n\t\t\t\"Azure Client can load a non-existent container\",\n\t\t);\n\t\t// eslint-disable-next-line require-atomic-updates\n\t\tconsole.error = consoleErrorFunction;\n\t});\n\n\t/**\n\t * Scenario: Test if AzureClient with only read permission starts the container in read mode.\n\t * AzureClient will attempt to start the connection in write mode, and since access permissions\n\t * does not offer write capabilities, the established connection mode will be `read`.\n\t *\n\t * Expected behavior: AzureClient should start the container with the connectionMode in `read`.\n\t */\n\tit(\"can create a container with only read permission in read mode\", async () => {\n\t\tconst readOnlyAzureClient = createAzureClient({ scopes: [ScopeType.DocRead] });\n\n\t\tconst { container } = await readOnlyAzureClient.createContainer(schema);\n\t\tconst containerId = await container.attach();\n\t\tawait timeoutPromise((resolve) => container.once(\"connected\", resolve), {\n\t\t\tdurationMs: 1000,\n\t\t\terrorMsg: \"container connect() timeout\",\n\t\t});\n\t\tconst { container: containerGet } = await readOnlyAzureClient.getContainer(\n\t\t\tcontainerId,\n\t\t\tschema,\n\t\t);\n\n\t\tassert.strictEqual(\n\t\t\tconnectionModeOf(container),\n\t\t\t\"read\",\n\t\t\t\"Creating a container with only read permission is not in read mode\",\n\t\t);\n\n\t\tassert.strictEqual(\n\t\t\tconnectionModeOf(containerGet),\n\t\t\t\"read\",\n\t\t\t\"Getting a container with only read permission is not in read mode\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: Test if AzureClient with read and write permissions starts the container in write mode.\n\t * AzureClient will attempt to start the connection in write mode, and since access permissions offer\n\t * write capability, the established connection mode will be `write`.\n\t *\n\t * Expected behavior: AzureClient should start the container with the connectionMode in `write`.\n\t */\n\tit(\"can create a container with read and write permissions in write mode\", async () => {\n\t\tconst readWriteAzureClient = createAzureClient({\n\t\t\tscopes: [ScopeType.DocRead, ScopeType.DocWrite],\n\t\t});\n\n\t\tconst { container } = await readWriteAzureClient.createContainer(schema);\n\t\tconst containerId = await container.attach();\n\t\tawait timeoutPromise((resolve) => container.once(\"connected\", resolve), {\n\t\t\tdurationMs: 1000,\n\t\t\terrorMsg: \"container connect() timeout\",\n\t\t});\n\t\tconst { container: containerGet } = await readWriteAzureClient.getContainer(\n\t\t\tcontainerId,\n\t\t\tschema,\n\t\t);\n\n\t\tassert.strictEqual(\n\t\t\tconnectionModeOf(container),\n\t\t\t\"write\",\n\t\t\t\"Creating a container with only write permission is not in write mode\",\n\t\t);\n\n\t\tassert.strictEqual(\n\t\t\tconnectionModeOf(containerGet),\n\t\t\t\"write\",\n\t\t\t\"Getting a container with only write permission is not in write mode\",\n\t\t);\n\t});\n\n\tit(\"GC is disabled by default, but can be enabled\", async () => {\n\t\tconst { container: container_defaultConfig } = await client.createContainer(schema);\n\t\tassert.strictEqual(\n\t\t\t(\n\t\t\t\tcontainer_defaultConfig as unknown as { container: { mc: MonitoringContext } }\n\t\t\t).container.mc.config.getBoolean(\"Fluid.GarbageCollection.RunSweep\"),\n\t\t\tfalse,\n\t\t\t\"Expected GC to be disabled per configs set in constructor\",\n\t\t);\n\n\t\tconst client_gcEnabled = createAzureClient({\n\t\t\tconfigProvider: {\n\t\t\t\tgetRawConfig: (name: string) =>\n\t\t\t\t\t({ \"Fluid.GarbageCollection.RunSweep\": true })[name],\n\t\t\t},\n\t\t});\n\t\tconst { container: container_gcEnabled } = await client_gcEnabled.createContainer(schema);\n\t\tassert.strictEqual(\n\t\t\t(\n\t\t\t\tcontainer_gcEnabled as unknown as { container: { mc: MonitoringContext } }\n\t\t\t).container.mc.config.getBoolean(\"Fluid.GarbageCollection.RunSweep\"),\n\t\t\ttrue,\n\t\t\t\"Expected GC to be able to enable GC via config provider\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: Ensure that the types of 'initialObjects' are preserved when the container\n\t * schema type is statically known.\n\t */\n\tdescribe(\"'initialObjects'\", () => {\n\t\tit(\"preserves 'SharedMap' type\", async () => {\n\t\t\tconst { container } = await client.createContainer({\n\t\t\t\tinitialObjects: {\n\t\t\t\t\tmap: SharedMap,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t// Ensure that the 'map' API is accessible without casting or suppressing lint rules:\n\t\t\tassert.equal(container.initialObjects.map.get(\"nonexistent\"), undefined);\n\t\t});\n\n\t\tit(\"preserves 'SharedTree' type\", async () => {\n\t\t\tconst { container } = await client.createContainer({\n\t\t\t\tinitialObjects: {\n\t\t\t\t\ttree: SharedTree,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t// Ensure that the 'tree' API is accessible without casting or suppressing lint rules:\n\t\t\tconst tree = container.initialObjects.tree;\n\n\t\t\t// Apply Schema to returned SharedTree.\n\t\t\tconst _ = new SchemaFactory(\"test\");\n\n\t\t\tclass RootNode extends _.object(\"Root\", {\n\t\t\t\titWorks: _.string,\n\t\t\t}) {}\n\n\t\t\tconst view = tree.schematize({\n\t\t\t\tschema: RootNode,\n\t\t\t\tinitialTree: () =>\n\t\t\t\t\tnew RootNode({\n\t\t\t\t\t\titWorks: \"yes\",\n\t\t\t\t\t}),\n\t\t\t});\n\n\t\t\t// Ensure root node is correctly typed.\n\t\t\tassert.equal(view.root.itWorks, \"yes\");\n\t\t});\n\t});\n});\n"]}
@@ -1,42 +0,0 @@
1
- use_current_ClassDeclaration_AzureClient(get_old_ClassDeclaration_AzureClient());
2
- use_old_ClassDeclaration_AzureClient(get_current_ClassDeclaration_AzureClient());
3
- use_current_InterfaceDeclaration_AzureClientProps(get_old_InterfaceDeclaration_AzureClientProps());
4
- use_old_InterfaceDeclaration_AzureClientProps(get_current_InterfaceDeclaration_AzureClientProps());
5
- use_current_InterfaceDeclaration_AzureConnectionConfig(get_old_InterfaceDeclaration_AzureConnectionConfig());
6
- use_old_InterfaceDeclaration_AzureConnectionConfig(get_current_InterfaceDeclaration_AzureConnectionConfig());
7
- use_current_TypeAliasDeclaration_AzureConnectionConfigType(get_old_TypeAliasDeclaration_AzureConnectionConfigType());
8
- use_old_TypeAliasDeclaration_AzureConnectionConfigType(get_current_TypeAliasDeclaration_AzureConnectionConfigType());
9
- use_current_InterfaceDeclaration_AzureContainerServices(get_old_InterfaceDeclaration_AzureContainerServices());
10
- use_old_InterfaceDeclaration_AzureContainerServices(get_current_InterfaceDeclaration_AzureContainerServices());
11
- use_current_InterfaceDeclaration_AzureContainerVersion(get_old_InterfaceDeclaration_AzureContainerVersion());
12
- use_old_InterfaceDeclaration_AzureContainerVersion(get_current_InterfaceDeclaration_AzureContainerVersion());
13
- use_current_ClassDeclaration_AzureFunctionTokenProvider(get_old_ClassDeclaration_AzureFunctionTokenProvider());
14
- use_old_ClassDeclaration_AzureFunctionTokenProvider(get_current_ClassDeclaration_AzureFunctionTokenProvider());
15
- use_current_InterfaceDeclaration_AzureGetVersionsOptions(get_old_InterfaceDeclaration_AzureGetVersionsOptions());
16
- use_old_InterfaceDeclaration_AzureGetVersionsOptions(get_current_InterfaceDeclaration_AzureGetVersionsOptions());
17
- use_current_InterfaceDeclaration_AzureLocalConnectionConfig(get_old_InterfaceDeclaration_AzureLocalConnectionConfig());
18
- use_old_InterfaceDeclaration_AzureLocalConnectionConfig(get_current_InterfaceDeclaration_AzureLocalConnectionConfig());
19
- use_current_InterfaceDeclaration_AzureMember(get_old_InterfaceDeclaration_AzureMember());
20
- use_old_InterfaceDeclaration_AzureMember(get_current_InterfaceDeclaration_AzureMember());
21
- use_current_InterfaceDeclaration_AzureRemoteConnectionConfig(get_old_InterfaceDeclaration_AzureRemoteConnectionConfig());
22
- use_old_InterfaceDeclaration_AzureRemoteConnectionConfig(get_current_InterfaceDeclaration_AzureRemoteConnectionConfig());
23
- use_current_InterfaceDeclaration_AzureUser(get_old_InterfaceDeclaration_AzureUser());
24
- use_old_InterfaceDeclaration_AzureUser(get_current_InterfaceDeclaration_AzureUser());
25
- use_current_TypeAliasDeclaration_IAzureAudience(get_old_TypeAliasDeclaration_IAzureAudience());
26
- use_old_TypeAliasDeclaration_IAzureAudience(get_current_TypeAliasDeclaration_IAzureAudience());
27
- use_current_InterfaceDeclaration_ITelemetryBaseEvent(get_old_InterfaceDeclaration_ITelemetryBaseEvent());
28
- use_old_InterfaceDeclaration_ITelemetryBaseEvent(get_current_InterfaceDeclaration_ITelemetryBaseEvent());
29
- use_current_InterfaceDeclaration_ITelemetryBaseLogger(get_old_InterfaceDeclaration_ITelemetryBaseLogger());
30
- use_old_InterfaceDeclaration_ITelemetryBaseLogger(get_current_InterfaceDeclaration_ITelemetryBaseLogger());
31
- use_current_InterfaceDeclaration_ITokenClaims(get_old_InterfaceDeclaration_ITokenClaims());
32
- use_old_InterfaceDeclaration_ITokenClaims(get_current_InterfaceDeclaration_ITokenClaims());
33
- use_current_InterfaceDeclaration_ITokenProvider(get_old_InterfaceDeclaration_ITokenProvider());
34
- use_old_InterfaceDeclaration_ITokenProvider(get_current_InterfaceDeclaration_ITokenProvider());
35
- use_current_InterfaceDeclaration_ITokenResponse(get_old_InterfaceDeclaration_ITokenResponse());
36
- use_old_InterfaceDeclaration_ITokenResponse(get_current_InterfaceDeclaration_ITokenResponse());
37
- use_current_InterfaceDeclaration_IUser(get_old_InterfaceDeclaration_IUser());
38
- use_old_InterfaceDeclaration_IUser(get_current_InterfaceDeclaration_IUser());
39
- use_current_EnumDeclaration_ScopeType(get_old_EnumDeclaration_ScopeType());
40
- use_old_EnumDeclaration_ScopeType(get_current_EnumDeclaration_ScopeType());
41
- export {};
42
- //# sourceMappingURL=validateAzureClientPrevious.generated.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateAzureClientPrevious.generated.js","sourceRoot":"","sources":["../../../src/test/types/validateAzureClientPrevious.generated.ts"],"names":[],"mappings":"AAgCA,wCAAwC,CACpC,oCAAoC,EAAE,CAAC,CAAC;AAW5C,oCAAoC,CAChC,wCAAwC,EAAE,CAAC,CAAC;AAWhD,iDAAiD,CAC7C,6CAA6C,EAAE,CAAC,CAAC;AAWrD,6CAA6C,CACzC,iDAAiD,EAAE,CAAC,CAAC;AAWzD,sDAAsD,CAClD,kDAAkD,EAAE,CAAC,CAAC;AAW1D,kDAAkD,CAC9C,sDAAsD,EAAE,CAAC,CAAC;AAW9D,0DAA0D,CACtD,sDAAsD,EAAE,CAAC,CAAC;AAW9D,sDAAsD,CAClD,0DAA0D,EAAE,CAAC,CAAC;AAWlE,uDAAuD,CACnD,mDAAmD,EAAE,CAAC,CAAC;AAW3D,mDAAmD,CAC/C,uDAAuD,EAAE,CAAC,CAAC;AAW/D,sDAAsD,CAClD,kDAAkD,EAAE,CAAC,CAAC;AAW1D,kDAAkD,CAC9C,sDAAsD,EAAE,CAAC,CAAC;AAW9D,uDAAuD,CACnD,mDAAmD,EAAE,CAAC,CAAC;AAW3D,mDAAmD,CAC/C,uDAAuD,EAAE,CAAC,CAAC;AAW/D,wDAAwD,CACpD,oDAAoD,EAAE,CAAC,CAAC;AAW5D,oDAAoD,CAChD,wDAAwD,EAAE,CAAC,CAAC;AAWhE,2DAA2D,CACvD,uDAAuD,EAAE,CAAC,CAAC;AAW/D,uDAAuD,CACnD,2DAA2D,EAAE,CAAC,CAAC;AAWnE,4CAA4C,CACxC,wCAAwC,EAAE,CAAC,CAAC;AAWhD,wCAAwC,CACpC,4CAA4C,EAAE,CAAC,CAAC;AAWpD,4DAA4D,CACxD,wDAAwD,EAAE,CAAC,CAAC;AAWhE,wDAAwD,CACpD,4DAA4D,EAAE,CAAC,CAAC;AAWpE,0CAA0C,CACtC,sCAAsC,EAAE,CAAC,CAAC;AAW9C,sCAAsC,CAClC,0CAA0C,EAAE,CAAC,CAAC;AAWlD,+CAA+C,CAC3C,2CAA2C,EAAE,CAAC,CAAC;AAWnD,2CAA2C,CACvC,+CAA+C,EAAE,CAAC,CAAC;AAWvD,oDAAoD,CAChD,gDAAgD,EAAE,CAAC,CAAC;AAWxD,gDAAgD,CAC5C,oDAAoD,EAAE,CAAC,CAAC;AAW5D,qDAAqD,CACjD,iDAAiD,EAAE,CAAC,CAAC;AAWzD,iDAAiD,CAC7C,qDAAqD,EAAE,CAAC,CAAC;AAW7D,6CAA6C,CACzC,yCAAyC,EAAE,CAAC,CAAC;AAWjD,yCAAyC,CACrC,6CAA6C,EAAE,CAAC,CAAC;AAWrD,+CAA+C,CAC3C,2CAA2C,EAAE,CAAC,CAAC;AAWnD,2CAA2C,CACvC,+CAA+C,EAAE,CAAC,CAAC;AAWvD,+CAA+C,CAC3C,2CAA2C,EAAE,CAAC,CAAC;AAWnD,2CAA2C,CACvC,+CAA+C,EAAE,CAAC,CAAC;AAWvD,sCAAsC,CAClC,kCAAkC,EAAE,CAAC,CAAC;AAW1C,kCAAkC,CAC9B,sCAAsC,EAAE,CAAC,CAAC;AAW9C,qCAAqC,CACjC,iCAAiC,EAAE,CAAC,CAAC;AAWzC,iCAAiC,CAC7B,qCAAqC,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/azure-client-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* \"ClassDeclaration_AzureClient\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_ClassDeclaration_AzureClient():\n TypeOnly<old.AzureClient>;\ndeclare function use_current_ClassDeclaration_AzureClient(\n use: TypeOnly<current.AzureClient>): void;\nuse_current_ClassDeclaration_AzureClient(\n get_old_ClassDeclaration_AzureClient());\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_AzureClient\": {\"backCompat\": false}\n*/\ndeclare function get_current_ClassDeclaration_AzureClient():\n TypeOnly<current.AzureClient>;\ndeclare function use_old_ClassDeclaration_AzureClient(\n use: TypeOnly<old.AzureClient>): void;\nuse_old_ClassDeclaration_AzureClient(\n get_current_ClassDeclaration_AzureClient());\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_AzureClientProps\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureClientProps():\n TypeOnly<old.AzureClientProps>;\ndeclare function use_current_InterfaceDeclaration_AzureClientProps(\n use: TypeOnly<current.AzureClientProps>): void;\nuse_current_InterfaceDeclaration_AzureClientProps(\n get_old_InterfaceDeclaration_AzureClientProps());\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_AzureClientProps\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureClientProps():\n TypeOnly<current.AzureClientProps>;\ndeclare function use_old_InterfaceDeclaration_AzureClientProps(\n use: TypeOnly<old.AzureClientProps>): void;\nuse_old_InterfaceDeclaration_AzureClientProps(\n get_current_InterfaceDeclaration_AzureClientProps());\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_AzureConnectionConfig\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureConnectionConfig():\n TypeOnly<old.AzureConnectionConfig>;\ndeclare function use_current_InterfaceDeclaration_AzureConnectionConfig(\n use: TypeOnly<current.AzureConnectionConfig>): void;\nuse_current_InterfaceDeclaration_AzureConnectionConfig(\n get_old_InterfaceDeclaration_AzureConnectionConfig());\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_AzureConnectionConfig\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureConnectionConfig():\n TypeOnly<current.AzureConnectionConfig>;\ndeclare function use_old_InterfaceDeclaration_AzureConnectionConfig(\n use: TypeOnly<old.AzureConnectionConfig>): void;\nuse_old_InterfaceDeclaration_AzureConnectionConfig(\n get_current_InterfaceDeclaration_AzureConnectionConfig());\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* \"TypeAliasDeclaration_AzureConnectionConfigType\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_TypeAliasDeclaration_AzureConnectionConfigType():\n TypeOnly<old.AzureConnectionConfigType>;\ndeclare function use_current_TypeAliasDeclaration_AzureConnectionConfigType(\n use: TypeOnly<current.AzureConnectionConfigType>): void;\nuse_current_TypeAliasDeclaration_AzureConnectionConfigType(\n get_old_TypeAliasDeclaration_AzureConnectionConfigType());\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* \"TypeAliasDeclaration_AzureConnectionConfigType\": {\"backCompat\": false}\n*/\ndeclare function get_current_TypeAliasDeclaration_AzureConnectionConfigType():\n TypeOnly<current.AzureConnectionConfigType>;\ndeclare function use_old_TypeAliasDeclaration_AzureConnectionConfigType(\n use: TypeOnly<old.AzureConnectionConfigType>): void;\nuse_old_TypeAliasDeclaration_AzureConnectionConfigType(\n get_current_TypeAliasDeclaration_AzureConnectionConfigType());\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_AzureContainerServices\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureContainerServices():\n TypeOnly<old.AzureContainerServices>;\ndeclare function use_current_InterfaceDeclaration_AzureContainerServices(\n use: TypeOnly<current.AzureContainerServices>): void;\nuse_current_InterfaceDeclaration_AzureContainerServices(\n get_old_InterfaceDeclaration_AzureContainerServices());\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_AzureContainerServices\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureContainerServices():\n TypeOnly<current.AzureContainerServices>;\ndeclare function use_old_InterfaceDeclaration_AzureContainerServices(\n use: TypeOnly<old.AzureContainerServices>): void;\nuse_old_InterfaceDeclaration_AzureContainerServices(\n get_current_InterfaceDeclaration_AzureContainerServices());\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_AzureContainerVersion\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureContainerVersion():\n TypeOnly<old.AzureContainerVersion>;\ndeclare function use_current_InterfaceDeclaration_AzureContainerVersion(\n use: TypeOnly<current.AzureContainerVersion>): void;\nuse_current_InterfaceDeclaration_AzureContainerVersion(\n get_old_InterfaceDeclaration_AzureContainerVersion());\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_AzureContainerVersion\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureContainerVersion():\n TypeOnly<current.AzureContainerVersion>;\ndeclare function use_old_InterfaceDeclaration_AzureContainerVersion(\n use: TypeOnly<old.AzureContainerVersion>): void;\nuse_old_InterfaceDeclaration_AzureContainerVersion(\n get_current_InterfaceDeclaration_AzureContainerVersion());\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_AzureFunctionTokenProvider\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_ClassDeclaration_AzureFunctionTokenProvider():\n TypeOnly<old.AzureFunctionTokenProvider>;\ndeclare function use_current_ClassDeclaration_AzureFunctionTokenProvider(\n use: TypeOnly<current.AzureFunctionTokenProvider>): void;\nuse_current_ClassDeclaration_AzureFunctionTokenProvider(\n get_old_ClassDeclaration_AzureFunctionTokenProvider());\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_AzureFunctionTokenProvider\": {\"backCompat\": false}\n*/\ndeclare function get_current_ClassDeclaration_AzureFunctionTokenProvider():\n TypeOnly<current.AzureFunctionTokenProvider>;\ndeclare function use_old_ClassDeclaration_AzureFunctionTokenProvider(\n use: TypeOnly<old.AzureFunctionTokenProvider>): void;\nuse_old_ClassDeclaration_AzureFunctionTokenProvider(\n get_current_ClassDeclaration_AzureFunctionTokenProvider());\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_AzureGetVersionsOptions\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureGetVersionsOptions():\n TypeOnly<old.AzureGetVersionsOptions>;\ndeclare function use_current_InterfaceDeclaration_AzureGetVersionsOptions(\n use: TypeOnly<current.AzureGetVersionsOptions>): void;\nuse_current_InterfaceDeclaration_AzureGetVersionsOptions(\n get_old_InterfaceDeclaration_AzureGetVersionsOptions());\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_AzureGetVersionsOptions\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureGetVersionsOptions():\n TypeOnly<current.AzureGetVersionsOptions>;\ndeclare function use_old_InterfaceDeclaration_AzureGetVersionsOptions(\n use: TypeOnly<old.AzureGetVersionsOptions>): void;\nuse_old_InterfaceDeclaration_AzureGetVersionsOptions(\n get_current_InterfaceDeclaration_AzureGetVersionsOptions());\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_AzureLocalConnectionConfig\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureLocalConnectionConfig():\n TypeOnly<old.AzureLocalConnectionConfig>;\ndeclare function use_current_InterfaceDeclaration_AzureLocalConnectionConfig(\n use: TypeOnly<current.AzureLocalConnectionConfig>): void;\nuse_current_InterfaceDeclaration_AzureLocalConnectionConfig(\n get_old_InterfaceDeclaration_AzureLocalConnectionConfig());\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_AzureLocalConnectionConfig\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureLocalConnectionConfig():\n TypeOnly<current.AzureLocalConnectionConfig>;\ndeclare function use_old_InterfaceDeclaration_AzureLocalConnectionConfig(\n use: TypeOnly<old.AzureLocalConnectionConfig>): void;\nuse_old_InterfaceDeclaration_AzureLocalConnectionConfig(\n get_current_InterfaceDeclaration_AzureLocalConnectionConfig());\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_AzureMember\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureMember():\n TypeOnly<old.AzureMember>;\ndeclare function use_current_InterfaceDeclaration_AzureMember(\n use: TypeOnly<current.AzureMember>): void;\nuse_current_InterfaceDeclaration_AzureMember(\n get_old_InterfaceDeclaration_AzureMember());\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_AzureMember\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureMember():\n TypeOnly<current.AzureMember>;\ndeclare function use_old_InterfaceDeclaration_AzureMember(\n use: TypeOnly<old.AzureMember>): void;\nuse_old_InterfaceDeclaration_AzureMember(\n get_current_InterfaceDeclaration_AzureMember());\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_AzureRemoteConnectionConfig\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureRemoteConnectionConfig():\n TypeOnly<old.AzureRemoteConnectionConfig>;\ndeclare function use_current_InterfaceDeclaration_AzureRemoteConnectionConfig(\n use: TypeOnly<current.AzureRemoteConnectionConfig>): void;\nuse_current_InterfaceDeclaration_AzureRemoteConnectionConfig(\n get_old_InterfaceDeclaration_AzureRemoteConnectionConfig());\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_AzureRemoteConnectionConfig\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureRemoteConnectionConfig():\n TypeOnly<current.AzureRemoteConnectionConfig>;\ndeclare function use_old_InterfaceDeclaration_AzureRemoteConnectionConfig(\n use: TypeOnly<old.AzureRemoteConnectionConfig>): void;\nuse_old_InterfaceDeclaration_AzureRemoteConnectionConfig(\n get_current_InterfaceDeclaration_AzureRemoteConnectionConfig());\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_AzureUser\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_AzureUser():\n TypeOnly<old.AzureUser>;\ndeclare function use_current_InterfaceDeclaration_AzureUser(\n use: TypeOnly<current.AzureUser>): void;\nuse_current_InterfaceDeclaration_AzureUser(\n get_old_InterfaceDeclaration_AzureUser());\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_AzureUser\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_AzureUser():\n TypeOnly<current.AzureUser>;\ndeclare function use_old_InterfaceDeclaration_AzureUser(\n use: TypeOnly<old.AzureUser>): void;\nuse_old_InterfaceDeclaration_AzureUser(\n get_current_InterfaceDeclaration_AzureUser());\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* \"TypeAliasDeclaration_IAzureAudience\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_TypeAliasDeclaration_IAzureAudience():\n TypeOnly<old.IAzureAudience>;\ndeclare function use_current_TypeAliasDeclaration_IAzureAudience(\n use: TypeOnly<current.IAzureAudience>): void;\nuse_current_TypeAliasDeclaration_IAzureAudience(\n get_old_TypeAliasDeclaration_IAzureAudience());\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* \"TypeAliasDeclaration_IAzureAudience\": {\"backCompat\": false}\n*/\ndeclare function get_current_TypeAliasDeclaration_IAzureAudience():\n TypeOnly<current.IAzureAudience>;\ndeclare function use_old_TypeAliasDeclaration_IAzureAudience(\n use: TypeOnly<old.IAzureAudience>): void;\nuse_old_TypeAliasDeclaration_IAzureAudience(\n get_current_TypeAliasDeclaration_IAzureAudience());\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_ITelemetryBaseEvent\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITelemetryBaseEvent():\n TypeOnly<old.ITelemetryBaseEvent>;\ndeclare function use_current_InterfaceDeclaration_ITelemetryBaseEvent(\n use: TypeOnly<current.ITelemetryBaseEvent>): void;\nuse_current_InterfaceDeclaration_ITelemetryBaseEvent(\n get_old_InterfaceDeclaration_ITelemetryBaseEvent());\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_ITelemetryBaseEvent\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITelemetryBaseEvent():\n TypeOnly<current.ITelemetryBaseEvent>;\ndeclare function use_old_InterfaceDeclaration_ITelemetryBaseEvent(\n use: TypeOnly<old.ITelemetryBaseEvent>): void;\nuse_old_InterfaceDeclaration_ITelemetryBaseEvent(\n get_current_InterfaceDeclaration_ITelemetryBaseEvent());\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_ITelemetryBaseLogger\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITelemetryBaseLogger():\n TypeOnly<old.ITelemetryBaseLogger>;\ndeclare function use_current_InterfaceDeclaration_ITelemetryBaseLogger(\n use: TypeOnly<current.ITelemetryBaseLogger>): void;\nuse_current_InterfaceDeclaration_ITelemetryBaseLogger(\n get_old_InterfaceDeclaration_ITelemetryBaseLogger());\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_ITelemetryBaseLogger\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITelemetryBaseLogger():\n TypeOnly<current.ITelemetryBaseLogger>;\ndeclare function use_old_InterfaceDeclaration_ITelemetryBaseLogger(\n use: TypeOnly<old.ITelemetryBaseLogger>): void;\nuse_old_InterfaceDeclaration_ITelemetryBaseLogger(\n get_current_InterfaceDeclaration_ITelemetryBaseLogger());\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_ITokenClaims\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITokenClaims():\n TypeOnly<old.ITokenClaims>;\ndeclare function use_current_InterfaceDeclaration_ITokenClaims(\n use: TypeOnly<current.ITokenClaims>): void;\nuse_current_InterfaceDeclaration_ITokenClaims(\n get_old_InterfaceDeclaration_ITokenClaims());\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_ITokenClaims\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITokenClaims():\n TypeOnly<current.ITokenClaims>;\ndeclare function use_old_InterfaceDeclaration_ITokenClaims(\n use: TypeOnly<old.ITokenClaims>): void;\nuse_old_InterfaceDeclaration_ITokenClaims(\n get_current_InterfaceDeclaration_ITokenClaims());\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_ITokenProvider\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITokenProvider():\n TypeOnly<old.ITokenProvider>;\ndeclare function use_current_InterfaceDeclaration_ITokenProvider(\n use: TypeOnly<current.ITokenProvider>): void;\nuse_current_InterfaceDeclaration_ITokenProvider(\n get_old_InterfaceDeclaration_ITokenProvider());\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_ITokenProvider\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITokenProvider():\n TypeOnly<current.ITokenProvider>;\ndeclare function use_old_InterfaceDeclaration_ITokenProvider(\n use: TypeOnly<old.ITokenProvider>): void;\nuse_old_InterfaceDeclaration_ITokenProvider(\n get_current_InterfaceDeclaration_ITokenProvider());\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_ITokenResponse\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITokenResponse():\n TypeOnly<old.ITokenResponse>;\ndeclare function use_current_InterfaceDeclaration_ITokenResponse(\n use: TypeOnly<current.ITokenResponse>): void;\nuse_current_InterfaceDeclaration_ITokenResponse(\n get_old_InterfaceDeclaration_ITokenResponse());\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_ITokenResponse\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITokenResponse():\n TypeOnly<current.ITokenResponse>;\ndeclare function use_old_InterfaceDeclaration_ITokenResponse(\n use: TypeOnly<old.ITokenResponse>): void;\nuse_old_InterfaceDeclaration_ITokenResponse(\n get_current_InterfaceDeclaration_ITokenResponse());\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_IUser\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_IUser():\n TypeOnly<old.IUser>;\ndeclare function use_current_InterfaceDeclaration_IUser(\n use: TypeOnly<current.IUser>): void;\nuse_current_InterfaceDeclaration_IUser(\n get_old_InterfaceDeclaration_IUser());\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_IUser\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_IUser():\n TypeOnly<current.IUser>;\ndeclare function use_old_InterfaceDeclaration_IUser(\n use: TypeOnly<old.IUser>): void;\nuse_old_InterfaceDeclaration_IUser(\n get_current_InterfaceDeclaration_IUser());\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* \"EnumDeclaration_ScopeType\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_EnumDeclaration_ScopeType():\n TypeOnly<old.ScopeType>;\ndeclare function use_current_EnumDeclaration_ScopeType(\n use: TypeOnly<current.ScopeType>): void;\nuse_current_EnumDeclaration_ScopeType(\n get_old_EnumDeclaration_ScopeType());\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* \"EnumDeclaration_ScopeType\": {\"backCompat\": false}\n*/\ndeclare function get_current_EnumDeclaration_ScopeType():\n TypeOnly<current.ScopeType>;\ndeclare function use_old_EnumDeclaration_ScopeType(\n use: TypeOnly<old.ScopeType>): void;\nuse_old_EnumDeclaration_ScopeType(\n get_current_EnumDeclaration_ScopeType());\n"]}