@fluid-experimental/odsp-end-to-end-tests 2.51.0-347100 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.cjs CHANGED
@@ -9,6 +9,18 @@ module.exports = {
9
9
  "prefer-arrow-callback": "off",
10
10
  "@typescript-eslint/strict-boolean-expressions": "off", // requires strictNullChecks=true in tsconfig
11
11
  "import/namespace": "off",
12
+
13
+ // #region TODO: remove these once this config has been updated to use our "recommended" base instead of our deprecated minimal one.
14
+ "@typescript-eslint/consistent-type-exports": [
15
+ "error",
16
+ { fixMixedExportsWithInlineTypeSpecifier: true },
17
+ ],
18
+ "@typescript-eslint/consistent-type-imports": [
19
+ "error",
20
+ { fixStyle: "inline-type-imports" },
21
+ ],
22
+ "@typescript-eslint/no-import-type-side-effects": "error",
23
+ // #endregion
12
24
  },
13
25
  parserOptions: {
14
26
  project: ["./src/test/tsconfig.json"],
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @fluid-experimental/odsp-end-to-end-tests
2
2
 
3
+ ## 2.52.0
4
+
5
+ Dependency updates only.
6
+
7
+ ## 2.51.0
8
+
9
+ Dependency updates only.
10
+
3
11
  ## 2.50.0
4
12
 
5
13
  Dependency updates only.
@@ -1 +1 @@
1
- {"version":3,"file":"OdspClientFactory.js","sourceRoot":"","sources":["../../src/test/OdspClientFactory.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\tIConfigProviderBase,\n\ttype ITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport { OdspClient, OdspConnectionConfig } from \"@fluidframework/odsp-client/internal\";\nimport {\n\tMockLogger,\n\tcreateChildLogger,\n\tcreateMultiSinkLogger,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport { OdspTestTokenProvider } from \"./OdspTokenFactory.js\";\n\n/**\n * Interface representing the range of login credentials for a tenant.\n */\ninterface LoginTenantRange {\n\tprefix: string;\n\tstart: number;\n\tcount: number;\n\tpassword: string;\n}\n\n/**\n * Interface representing a collection of tenants with their respective login ranges.\n * @example\n * ```string\n * {\"tenantName\":{\"range\":{\"prefix\":\"prefixName\",\"password\":\"XYZ\",\"start\":0,\"count\":2}}}\n * ```\n */\nexport interface LoginTenants {\n\t[tenant: string]: {\n\t\trange: LoginTenantRange;\n\t};\n}\n\n/**\n * Interface representing the odsp-client login account credentials.\n */\nexport interface IOdspLoginCredentials {\n\temail: string;\n\tpassword: string;\n}\n\n/**\n * Interface representing extended credentials for odsp-client, including AAD information.\n * Extends the basic login credentials with client ID and client secret.\n */\nexport interface IOdspCredentials extends IOdspLoginCredentials {\n\tclientId: string;\n}\n\n/**\n * Get set of credential to use from env variable.\n */\nexport function getCredentials(): IOdspLoginCredentials[] {\n\tconst creds: IOdspLoginCredentials[] = [];\n\tconst loginTenants = process.env.login__odspclient__spe__test__tenants as string;\n\n\tif (loginTenants === \"\" || loginTenants === undefined) {\n\t\tthrow new Error(\"Login tenant is missing\");\n\t}\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst tenants: LoginTenants = JSON.parse(loginTenants);\n\tconst tenantKey = Object.keys(tenants);\n\tconst tenantName = tenantKey[0];\n\tif (tenantName === undefined) {\n\t\tthrow new Error(\"Tenant is undefined\");\n\t}\n\tconst tenantInfo = tenants[tenantName];\n\n\tif (tenantInfo === undefined) {\n\t\tthrow new Error(\"Tenant info is undefined\");\n\t}\n\n\tconst range = tenantInfo.range;\n\n\tif (range === undefined) {\n\t\tthrow new Error(\"range is undefined\");\n\t}\n\n\tfor (let i = 0; i < range.count; i++) {\n\t\tcreds.push({\n\t\t\temail: `${range.prefix}${range.start + i}@${tenantName}`,\n\t\t\tpassword: range.password,\n\t\t});\n\t}\n\n\tconst [client1Creds, client2Creds] = creds;\n\n\tif (client1Creds === undefined || client2Creds === undefined || creds.length < 2) {\n\t\tthrow new Error(\"Insufficient number of login credentials\");\n\t}\n\n\tif (\n\t\tclient1Creds.email === undefined ||\n\t\tclient1Creds.password === undefined ||\n\t\tclient2Creds.email === undefined ||\n\t\tclient2Creds.password === undefined\n\t) {\n\t\tthrow new Error(\"Email or password is missing for login account\");\n\t}\n\n\treturn creds;\n}\n\n/**\n * This function will determine if local or remote mode is required (based on FLUID_CLIENT), and return a new\n * {@link OdspClient} instance based on the mode by setting the Connection config accordingly.\n */\nexport function createOdspClient(\n\tcreds: IOdspLoginCredentials,\n\tlogger?: MockLogger,\n\tconfigProvider?: IConfigProviderBase,\n): OdspClient {\n\tconst siteUrl = process.env.odsp__client__siteUrl as string;\n\tconst driveId = process.env.odsp__client__driveId as string;\n\tconst clientId = process.env.odsp__client__clientId as string;\n\tif (siteUrl === \"\" || siteUrl === undefined) {\n\t\tthrow new Error(\"site url is missing\");\n\t}\n\tif (driveId === \"\" || driveId === undefined) {\n\t\tthrow new Error(\"SharePoint Embedded container id is missing\");\n\t}\n\n\tif (clientId === \"\" || clientId === undefined) {\n\t\tthrow new Error(\"client id is missing\");\n\t}\n\n\tconst args = process.argv.slice(2);\n\n\tconst driverIndex = args.indexOf(\"--driver\");\n\tconst odspEndpointNameIndex = args.indexOf(\"--odspEndpointName\");\n\n\t// Get values associated with the flags\n\tconst driverType = driverIndex === -1 ? undefined : args[driverIndex + 1];\n\tconst driverEndpointName =\n\t\todspEndpointNameIndex === -1 ? undefined : args[odspEndpointNameIndex + 1];\n\n\tconst credentials: IOdspCredentials = {\n\t\tclientId,\n\t\t...creds,\n\t};\n\n\tconst connectionProps: OdspConnectionConfig = {\n\t\tsiteUrl,\n\t\ttokenProvider: new OdspTestTokenProvider(credentials),\n\t\tdriveId,\n\t\tfilePath: \"\",\n\t};\n\n\tconst getLogger = (): ITelemetryBaseLogger | undefined => {\n\t\tconst testLogger = getTestLogger?.();\n\t\tif (!logger && !testLogger) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (logger && testLogger) {\n\t\t\treturn createMultiSinkLogger({ loggers: [logger, testLogger] });\n\t\t}\n\t\treturn logger ?? testLogger;\n\t};\n\n\tconst createLogger = createChildLogger({\n\t\tlogger: getLogger(),\n\t\tproperties: {\n\t\t\tall: {\n\t\t\t\tdriverType,\n\t\t\t\tdriverEndpointName,\n\t\t\t},\n\t\t},\n\t});\n\n\treturn new OdspClient({\n\t\tconnection: connectionProps,\n\t\tlogger: createLogger,\n\t\tconfigProvider,\n\t});\n}\n"]}
1
+ {"version":3,"file":"OdspClientFactory.js","sourceRoot":"","sources":["../../src/test/OdspClientFactory.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 {\n\tIConfigProviderBase,\n\tITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport { OdspClient, type OdspConnectionConfig } from \"@fluidframework/odsp-client/internal\";\nimport {\n\ttype MockLogger,\n\tcreateChildLogger,\n\tcreateMultiSinkLogger,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport { OdspTestTokenProvider } from \"./OdspTokenFactory.js\";\n\n/**\n * Interface representing the range of login credentials for a tenant.\n */\ninterface LoginTenantRange {\n\tprefix: string;\n\tstart: number;\n\tcount: number;\n\tpassword: string;\n}\n\n/**\n * Interface representing a collection of tenants with their respective login ranges.\n * @example\n * ```string\n * {\"tenantName\":{\"range\":{\"prefix\":\"prefixName\",\"password\":\"XYZ\",\"start\":0,\"count\":2}}}\n * ```\n */\nexport interface LoginTenants {\n\t[tenant: string]: {\n\t\trange: LoginTenantRange;\n\t};\n}\n\n/**\n * Interface representing the odsp-client login account credentials.\n */\nexport interface IOdspLoginCredentials {\n\temail: string;\n\tpassword: string;\n}\n\n/**\n * Interface representing extended credentials for odsp-client, including AAD information.\n * Extends the basic login credentials with client ID and client secret.\n */\nexport interface IOdspCredentials extends IOdspLoginCredentials {\n\tclientId: string;\n}\n\n/**\n * Get set of credential to use from env variable.\n */\nexport function getCredentials(): IOdspLoginCredentials[] {\n\tconst creds: IOdspLoginCredentials[] = [];\n\tconst loginTenants = process.env.login__odspclient__spe__test__tenants as string;\n\n\tif (loginTenants === \"\" || loginTenants === undefined) {\n\t\tthrow new Error(\"Login tenant is missing\");\n\t}\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst tenants: LoginTenants = JSON.parse(loginTenants);\n\tconst tenantKey = Object.keys(tenants);\n\tconst tenantName = tenantKey[0];\n\tif (tenantName === undefined) {\n\t\tthrow new Error(\"Tenant is undefined\");\n\t}\n\tconst tenantInfo = tenants[tenantName];\n\n\tif (tenantInfo === undefined) {\n\t\tthrow new Error(\"Tenant info is undefined\");\n\t}\n\n\tconst range = tenantInfo.range;\n\n\tif (range === undefined) {\n\t\tthrow new Error(\"range is undefined\");\n\t}\n\n\tfor (let i = 0; i < range.count; i++) {\n\t\tcreds.push({\n\t\t\temail: `${range.prefix}${range.start + i}@${tenantName}`,\n\t\t\tpassword: range.password,\n\t\t});\n\t}\n\n\tconst [client1Creds, client2Creds] = creds;\n\n\tif (client1Creds === undefined || client2Creds === undefined || creds.length < 2) {\n\t\tthrow new Error(\"Insufficient number of login credentials\");\n\t}\n\n\tif (\n\t\tclient1Creds.email === undefined ||\n\t\tclient1Creds.password === undefined ||\n\t\tclient2Creds.email === undefined ||\n\t\tclient2Creds.password === undefined\n\t) {\n\t\tthrow new Error(\"Email or password is missing for login account\");\n\t}\n\n\treturn creds;\n}\n\n/**\n * This function will determine if local or remote mode is required (based on FLUID_CLIENT), and return a new\n * {@link OdspClient} instance based on the mode by setting the Connection config accordingly.\n */\nexport function createOdspClient(\n\tcreds: IOdspLoginCredentials,\n\tlogger?: MockLogger,\n\tconfigProvider?: IConfigProviderBase,\n): OdspClient {\n\tconst siteUrl = process.env.odsp__client__siteUrl as string;\n\tconst driveId = process.env.odsp__client__driveId as string;\n\tconst clientId = process.env.odsp__client__clientId as string;\n\tif (siteUrl === \"\" || siteUrl === undefined) {\n\t\tthrow new Error(\"site url is missing\");\n\t}\n\tif (driveId === \"\" || driveId === undefined) {\n\t\tthrow new Error(\"SharePoint Embedded container id is missing\");\n\t}\n\n\tif (clientId === \"\" || clientId === undefined) {\n\t\tthrow new Error(\"client id is missing\");\n\t}\n\n\tconst args = process.argv.slice(2);\n\n\tconst driverIndex = args.indexOf(\"--driver\");\n\tconst odspEndpointNameIndex = args.indexOf(\"--odspEndpointName\");\n\n\t// Get values associated with the flags\n\tconst driverType = driverIndex === -1 ? undefined : args[driverIndex + 1];\n\tconst driverEndpointName =\n\t\todspEndpointNameIndex === -1 ? undefined : args[odspEndpointNameIndex + 1];\n\n\tconst credentials: IOdspCredentials = {\n\t\tclientId,\n\t\t...creds,\n\t};\n\n\tconst connectionProps: OdspConnectionConfig = {\n\t\tsiteUrl,\n\t\ttokenProvider: new OdspTestTokenProvider(credentials),\n\t\tdriveId,\n\t\tfilePath: \"\",\n\t};\n\n\tconst getLogger = (): ITelemetryBaseLogger | undefined => {\n\t\tconst testLogger = getTestLogger?.();\n\t\tif (!logger && !testLogger) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (logger && testLogger) {\n\t\t\treturn createMultiSinkLogger({ loggers: [logger, testLogger] });\n\t\t}\n\t\treturn logger ?? testLogger;\n\t};\n\n\tconst createLogger = createChildLogger({\n\t\tlogger: getLogger(),\n\t\tproperties: {\n\t\t\tall: {\n\t\t\t\tdriverType,\n\t\t\t\tdriverEndpointName,\n\t\t\t},\n\t\t},\n\t});\n\n\treturn new OdspClient({\n\t\tconnection: connectionProps,\n\t\tlogger: createLogger,\n\t\tconfigProvider,\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OdspTokenFactory.js","sourceRoot":"","sources":["../../src/test/OdspTokenFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAGN,gBAAgB,EAChB,eAAe,GACf,MAAM,4CAA4C,CAAC;AAKpD;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAGjC,YAAY,WAA6B;QACxC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,OAAgB;QACjE,MAAM,SAAS,GAAG,sEAAsE,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO;YACN,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,MAAM,CAAC,WAAW;SACzB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,OAAgB;QAC/D,MAAM,gBAAgB,GAAG,GAAG,OAAO,qBAAqB,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACjE,OAAO;YACN,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,MAAM,CAAC,WAAW;SACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACxB,OAAe,EACf,KAAa;QAKb,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;QACrC,MAAM,YAAY,GAAwB;YACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC7B,CAAC;QACF,MAAM,WAAW,GAA4B;YAC5C,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YAC1B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC7B,CAAC;QACF,MAAM,IAAI,GAAG;YACZ,KAAK;YACL,SAAS,EAAE,YAAY,CAAC,QAAQ;YAChC,GAAG,WAAW;SACd,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,eAAe,CACrC,gBAAgB,CAAC,MAAM,CAAC,EACxB,IAAI,eAAe,CAAC,IAAI,CAAC,CACzB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC;QAChD,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC;QAElD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IACtC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { IOdspTokenProvider } from \"@fluidframework/odsp-client/internal\";\nimport {\n\tIPublicClientConfig,\n\tTokenRequestCredentials,\n\tgetFetchTokenUrl,\n\tunauthPostAsync,\n} from \"@fluidframework/odsp-doclib-utils/internal\";\nimport { TokenResponse } from \"@fluidframework/odsp-driver-definitions/internal\";\n\nimport { IOdspCredentials } from \"./OdspClientFactory.js\";\n\n/**\n * This class implements the IOdspTokenProvider interface and provides methods for fetching push and storage tokens.\n */\nexport class OdspTestTokenProvider implements IOdspTokenProvider {\n\tprivate readonly creds: IOdspCredentials;\n\n\tconstructor(credentials: IOdspCredentials) {\n\t\tthis.creds = credentials;\n\t}\n\n\tpublic async fetchWebsocketToken(siteUrl: string, refresh: boolean): Promise<TokenResponse> {\n\t\tconst pushScope = \"offline_access https://pushchannel.1drv.ms/PushChannel.ReadWrite.All\";\n\t\tconst tokens = await this.fetchTokens(siteUrl, pushScope);\n\t\treturn {\n\t\t\tfromCache: true,\n\t\t\ttoken: tokens.accessToken,\n\t\t};\n\t}\n\n\tpublic async fetchStorageToken(siteUrl: string, refresh: boolean): Promise<TokenResponse> {\n\t\tconst sharePointScopes = `${siteUrl}/Container.Selected`;\n\t\tconst tokens = await this.fetchTokens(siteUrl, sharePointScopes);\n\t\treturn {\n\t\t\tfromCache: true,\n\t\t\ttoken: tokens.accessToken,\n\t\t};\n\t}\n\n\tprivate async fetchTokens(\n\t\tsiteUrl: string,\n\t\tscope: string,\n\t): Promise<{\n\t\taccessToken: string;\n\t\trefreshToken: string;\n\t}> {\n\t\tconst server = new URL(siteUrl).host;\n\t\tconst clientConfig: IPublicClientConfig = {\n\t\t\tclientId: this.creds.clientId,\n\t\t};\n\t\tconst credentials: TokenRequestCredentials = {\n\t\t\tgrant_type: \"password\",\n\t\t\tusername: this.creds.email,\n\t\t\tpassword: this.creds.password,\n\t\t};\n\t\tconst body = {\n\t\t\tscope,\n\t\t\tclient_id: clientConfig.clientId,\n\t\t\t...credentials,\n\t\t};\n\t\tconst response = await unauthPostAsync(\n\t\t\tgetFetchTokenUrl(server),\n\t\t\tnew URLSearchParams(body),\n\t\t);\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to obtain tokens: ${await response.text()}`);\n\t\t}\n\n\t\tconst parsedResponse = await response.json();\n\t\tconst accessToken = parsedResponse.access_token;\n\t\tconst refreshToken = parsedResponse.refresh_token;\n\n\t\treturn { accessToken, refreshToken };\n\t}\n}\n"]}
1
+ {"version":3,"file":"OdspTokenFactory.js","sourceRoot":"","sources":["../../src/test/OdspTokenFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAGN,gBAAgB,EAChB,eAAe,GACf,MAAM,4CAA4C,CAAC;AAKpD;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAGjC,YAAY,WAA6B;QACxC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,OAAgB;QACjE,MAAM,SAAS,GAAG,sEAAsE,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO;YACN,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,MAAM,CAAC,WAAW;SACzB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,OAAgB;QAC/D,MAAM,gBAAgB,GAAG,GAAG,OAAO,qBAAqB,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACjE,OAAO;YACN,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,MAAM,CAAC,WAAW;SACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACxB,OAAe,EACf,KAAa;QAKb,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;QACrC,MAAM,YAAY,GAAwB;YACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC7B,CAAC;QACF,MAAM,WAAW,GAA4B;YAC5C,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YAC1B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;SAC7B,CAAC;QACF,MAAM,IAAI,GAAG;YACZ,KAAK;YACL,SAAS,EAAE,YAAY,CAAC,QAAQ;YAChC,GAAG,WAAW;SACd,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,eAAe,CACrC,gBAAgB,CAAC,MAAM,CAAC,EACxB,IAAI,eAAe,CAAC,IAAI,CAAC,CACzB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC;QAChD,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC;QAElD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IACtC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport type { IOdspTokenProvider } from \"@fluidframework/odsp-client/internal\";\nimport {\n\ttype IPublicClientConfig,\n\ttype TokenRequestCredentials,\n\tgetFetchTokenUrl,\n\tunauthPostAsync,\n} from \"@fluidframework/odsp-doclib-utils/internal\";\nimport type { TokenResponse } from \"@fluidframework/odsp-driver-definitions/internal\";\n\nimport type { IOdspCredentials } from \"./OdspClientFactory.js\";\n\n/**\n * This class implements the IOdspTokenProvider interface and provides methods for fetching push and storage tokens.\n */\nexport class OdspTestTokenProvider implements IOdspTokenProvider {\n\tprivate readonly creds: IOdspCredentials;\n\n\tconstructor(credentials: IOdspCredentials) {\n\t\tthis.creds = credentials;\n\t}\n\n\tpublic async fetchWebsocketToken(siteUrl: string, refresh: boolean): Promise<TokenResponse> {\n\t\tconst pushScope = \"offline_access https://pushchannel.1drv.ms/PushChannel.ReadWrite.All\";\n\t\tconst tokens = await this.fetchTokens(siteUrl, pushScope);\n\t\treturn {\n\t\t\tfromCache: true,\n\t\t\ttoken: tokens.accessToken,\n\t\t};\n\t}\n\n\tpublic async fetchStorageToken(siteUrl: string, refresh: boolean): Promise<TokenResponse> {\n\t\tconst sharePointScopes = `${siteUrl}/Container.Selected`;\n\t\tconst tokens = await this.fetchTokens(siteUrl, sharePointScopes);\n\t\treturn {\n\t\t\tfromCache: true,\n\t\t\ttoken: tokens.accessToken,\n\t\t};\n\t}\n\n\tprivate async fetchTokens(\n\t\tsiteUrl: string,\n\t\tscope: string,\n\t): Promise<{\n\t\taccessToken: string;\n\t\trefreshToken: string;\n\t}> {\n\t\tconst server = new URL(siteUrl).host;\n\t\tconst clientConfig: IPublicClientConfig = {\n\t\t\tclientId: this.creds.clientId,\n\t\t};\n\t\tconst credentials: TokenRequestCredentials = {\n\t\t\tgrant_type: \"password\",\n\t\t\tusername: this.creds.email,\n\t\t\tpassword: this.creds.password,\n\t\t};\n\t\tconst body = {\n\t\t\tscope,\n\t\t\tclient_id: clientConfig.clientId,\n\t\t\t...credentials,\n\t\t};\n\t\tconst response = await unauthPostAsync(\n\t\t\tgetFetchTokenUrl(server),\n\t\t\tnew URLSearchParams(body),\n\t\t);\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to obtain tokens: ${await response.text()}`);\n\t\t}\n\n\t\tconst parsedResponse = await response.json();\n\t\tconst accessToken = parsedResponse.access_token;\n\t\tconst refreshToken = parsedResponse.refresh_token;\n\n\t\treturn { accessToken, refreshToken };\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TestDataObject.js","sourceRoot":"","sources":["../../src/test/TestDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,UAAU,EACV,iBAAiB,EAEjB,oBAAoB,GACpB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,MAAM,mBAAoB,SAAQ,UAAU;IAQ3C,YAAY,KAAuB;QAClC,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;;AATsB,wBAAI,GAAG,iCAAiC,CAAC;AAEzC,2BAAO,GAAG,IAAI,iBAAiB,CAAC;IACtD,IAAI,EAAE,mBAAmB,CAAC,IAAI;IAC9B,IAAI,EAAE,mBAAmB;CACzB,CAAC,CAAC;AAOJ,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAGxE,MAAM,OAAO,0BAA2B,SAAQ,UAAU;IAGzD;;OAEG;IACO,KAAK,CAAC,qBAAqB;QACpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAES,KAAK,CAAC,cAAc;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA8B,aAAa,CAAC,CAAC;QAChF,IAAI,CAAC,QAAQ,GAAG,MAAM,aAAa,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;IAUM,SAAS;QACf,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,IAAY,OAAO;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;;AArBsB,+BAAI,GAAG,yCAAyC,CAAC;AAEjD,kCAAO,GAAG,IAAI,iBAAiB,CAAC;IACtD,IAAI,EAAE,0BAA0B,CAAC,IAAI;IACrC,IAAI,EAAE,0BAA0B;IAChC,aAAa,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;CAC3C,CAAC,CAAC;AAkBJ,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tDataObject,\n\tDataObjectFactory,\n\tIDataObjectProps,\n\tcreateDataObjectKind,\n} from \"@fluidframework/aqueduct/internal\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { SharedCounter } from \"@fluidframework/counter/internal\";\n\nclass TestDataObjectClass extends DataObject {\n\tpublic static readonly Name = \"@fluid-example/test-data-object\";\n\n\tpublic static readonly factory = new DataObjectFactory({\n\t\ttype: TestDataObjectClass.Name,\n\t\tctor: TestDataObjectClass,\n\t});\n\n\tconstructor(props: IDataObjectProps) {\n\t\tsuper(props);\n\t}\n}\n\nexport const TestDataObject = createDataObjectKind(TestDataObjectClass);\nexport type TestDataObject = TestDataObjectClass;\n\nexport class CounterTestDataObjectClass extends DataObject {\n\tprivate _counter: SharedCounter | undefined;\n\n\t/**\n\t * Do setup work here\n\t */\n\tprotected async initializingFirstTime(): Promise<void> {\n\t\tconst counter = SharedCounter.create(this.runtime);\n\t\tthis.root.set(\"counter-key\", counter.handle);\n\t}\n\n\tprotected async hasInitialized(): Promise<void> {\n\t\tconst counterHandle = this.root.get<IFluidHandle<SharedCounter>>(\"counter-key\");\n\t\tthis._counter = await counterHandle?.get();\n\t}\n\n\tpublic static readonly Name = \"@fluid-example/counter-test-data-object\";\n\n\tpublic static readonly factory = new DataObjectFactory({\n\t\ttype: CounterTestDataObjectClass.Name,\n\t\tctor: CounterTestDataObjectClass,\n\t\tsharedObjects: [SharedCounter.getFactory()],\n\t});\n\n\tpublic increment(): void {\n\t\tthis.counter.increment(1);\n\t}\n\n\tpublic get value(): number {\n\t\treturn this.counter.value;\n\t}\n\n\tprivate get counter(): SharedCounter {\n\t\tif (this._counter === undefined) {\n\t\t\tthrow new Error(\"SharedCounter not initialized\");\n\t\t}\n\t\treturn this._counter;\n\t}\n}\n\nexport const CounterTestDataObject = createDataObjectKind(CounterTestDataObjectClass);\nexport type CounterTestDataObject = CounterTestDataObjectClass;\n"]}
1
+ {"version":3,"file":"TestDataObject.js","sourceRoot":"","sources":["../../src/test/TestDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,UAAU,EACV,iBAAiB,EAEjB,oBAAoB,GACpB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,MAAM,mBAAoB,SAAQ,UAAU;IAQ3C,YAAY,KAAuB;QAClC,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;;AATsB,wBAAI,GAAG,iCAAiC,CAAC;AAEzC,2BAAO,GAAG,IAAI,iBAAiB,CAAC;IACtD,IAAI,EAAE,mBAAmB,CAAC,IAAI;IAC9B,IAAI,EAAE,mBAAmB;CACzB,CAAC,CAAC;AAOJ,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAGxE,MAAM,OAAO,0BAA2B,SAAQ,UAAU;IAGzD;;OAEG;IACO,KAAK,CAAC,qBAAqB;QACpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAES,KAAK,CAAC,cAAc;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA8B,aAAa,CAAC,CAAC;QAChF,IAAI,CAAC,QAAQ,GAAG,MAAM,aAAa,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;IAUM,SAAS;QACf,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,IAAY,OAAO;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;;AArBsB,+BAAI,GAAG,yCAAyC,CAAC;AAEjD,kCAAO,GAAG,IAAI,iBAAiB,CAAC;IACtD,IAAI,EAAE,0BAA0B,CAAC,IAAI;IACrC,IAAI,EAAE,0BAA0B;IAChC,aAAa,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;CAC3C,CAAC,CAAC;AAkBJ,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tDataObject,\n\tDataObjectFactory,\n\ttype IDataObjectProps,\n\tcreateDataObjectKind,\n} from \"@fluidframework/aqueduct/internal\";\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { SharedCounter } from \"@fluidframework/counter/internal\";\n\nclass TestDataObjectClass extends DataObject {\n\tpublic static readonly Name = \"@fluid-example/test-data-object\";\n\n\tpublic static readonly factory = new DataObjectFactory({\n\t\ttype: TestDataObjectClass.Name,\n\t\tctor: TestDataObjectClass,\n\t});\n\n\tconstructor(props: IDataObjectProps) {\n\t\tsuper(props);\n\t}\n}\n\nexport const TestDataObject = createDataObjectKind(TestDataObjectClass);\nexport type TestDataObject = TestDataObjectClass;\n\nexport class CounterTestDataObjectClass extends DataObject {\n\tprivate _counter: SharedCounter | undefined;\n\n\t/**\n\t * Do setup work here\n\t */\n\tprotected async initializingFirstTime(): Promise<void> {\n\t\tconst counter = SharedCounter.create(this.runtime);\n\t\tthis.root.set(\"counter-key\", counter.handle);\n\t}\n\n\tprotected async hasInitialized(): Promise<void> {\n\t\tconst counterHandle = this.root.get<IFluidHandle<SharedCounter>>(\"counter-key\");\n\t\tthis._counter = await counterHandle?.get();\n\t}\n\n\tpublic static readonly Name = \"@fluid-example/counter-test-data-object\";\n\n\tpublic static readonly factory = new DataObjectFactory({\n\t\ttype: CounterTestDataObjectClass.Name,\n\t\tctor: CounterTestDataObjectClass,\n\t\tsharedObjects: [SharedCounter.getFactory()],\n\t});\n\n\tpublic increment(): void {\n\t\tthis.counter.increment(1);\n\t}\n\n\tpublic get value(): number {\n\t\treturn this.counter.value;\n\t}\n\n\tprivate get counter(): SharedCounter {\n\t\tif (this._counter === undefined) {\n\t\t\tthrow new Error(\"SharedCounter not initialized\");\n\t\t}\n\t\treturn this._counter;\n\t}\n}\n\nexport const CounterTestDataObject = createDataObjectKind(CounterTestDataObjectClass);\nexport type CounterTestDataObject = CounterTestDataObjectClass;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"audience.spec.js","sourceRoot":"","sources":["../../src/test/audience.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 { ConnectionState } from \"@fluidframework/container-loader\";\nimport { ConfigTypes, IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport { ContainerSchema } from \"@fluidframework/fluid-static\";\nimport { SharedMap } from \"@fluidframework/map/internal\";\nimport { OdspClient } from \"@fluidframework/odsp-client/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport { createOdspClient, getCredentials } from \"./OdspClientFactory.js\";\nimport { waitForMember } from \"./utils.js\";\n\nconst configProvider = (settings: Record<string, ConfigTypes>): IConfigProviderBase => ({\n\tgetRawConfig: (name: string): ConfigTypes => settings[name],\n});\n\ndescribe(\"Fluid audience\", () => {\n\tconst connectTimeoutMs = 10_000;\n\tlet client: OdspClient;\n\tlet schema: ContainerSchema;\n\tconst [client1Creds, client2Creds] = getCredentials();\n\n\tif (client1Creds === undefined || client2Creds === undefined) {\n\t\tthrow new Error(\"Couldn't get login credentials\");\n\t}\n\n\tbeforeEach(() => {\n\t\tclient = createOdspClient(client1Creds);\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: Find original member/self\n\t *\n\t * Expected behavior: container should have a single member upon creation.\n\t */\n\tit(\"can find original member\", async () => {\n\t\tconst { container, services } = await client.createContainer(schema);\n\t\tconst itemId = 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 itemId, \"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\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst myself = await waitForMember(services.audience, client1Creds.email);\n\t\tassert.notStrictEqual(myself, undefined, \"We should have myself at this point.\");\n\n\t\tconst members = services.audience.getMembers();\n\t\tassert.strictEqual(members.size, 1, \"We should have only one member at this point.\");\n\t});\n\n\t/**\n\t * Scenario: Find partner member\n\t *\n\t * Expected behavior: upon resolving container, the partner member should be able\n\t * to resolve original member.\n\t *\n\t * Note: This test is currently skipped because the web app examples indicate the audience is functioning properly. AB#6425\n\t */\n\tit.skip(\"can find partner member\", async () => {\n\t\tconst { container, services } = await client.createContainer(schema);\n\t\tconst itemId = 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 itemId, \"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\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst originalSelf = await waitForMember(services.audience, client1Creds.email);\n\t\tassert.notStrictEqual(originalSelf, undefined, \"We should have myself at this point.\");\n\n\t\t// pass client2 credentials\n\t\tconst client2 = createOdspClient(\n\t\t\tclient2Creds,\n\t\t\tundefined,\n\t\t\tconfigProvider({\n\t\t\t\t\"Fluid.Container.ForceWriteConnection\": true,\n\t\t\t}),\n\t\t);\n\t\tconst { services: servicesGet } = await client2.getContainer(itemId, schema);\n\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst partner = await waitForMember(servicesGet.audience, client2Creds.email);\n\t\tassert.notStrictEqual(partner, undefined, \"We should have partner at this point.\");\n\n\t\tconst members = servicesGet.audience.getMembers();\n\t\tassert.strictEqual(members.size, 2, \"We should have two members at this point.\");\n\n\t\tassert.notStrictEqual(\n\t\t\tpartner?.id,\n\t\t\toriginalSelf?.id,\n\t\t\t\"Self and partner should have different IDs\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: Partner should be able to observe change in audience\n\t *\n\t * Expected behavior: upon 1 partner leaving, other parther should observe\n\t * memberRemoved event and have correct partner count.\n\t *\n\t * Note: This test is currently skipped because the web app examples indicate the audience is functioning properly. AB#6425\n\t */\n\tit.skip(\"can observe member leaving\", async () => {\n\t\tconst { container } = await client.createContainer(schema);\n\t\tconst itemId = 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\t// pass client2 siteUrl and driveId\n\t\tconst client2 = createOdspClient(\n\t\t\tclient2Creds,\n\t\t\tundefined,\n\t\t\tconfigProvider({\n\t\t\t\t\"Fluid.Container.ForceWriteConnection\": true,\n\t\t\t}),\n\t\t);\n\t\tconst { services: servicesGet } = await client2.getContainer(itemId, schema);\n\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst partner = await waitForMember(servicesGet.audience, client2Creds.email);\n\t\tassert.notStrictEqual(partner, undefined, \"We should have partner at this point.\");\n\n\t\tlet members = servicesGet.audience.getMembers();\n\t\tassert.strictEqual(members.size, 2, \"We should have two members at this point.\");\n\n\t\tcontainer.disconnect();\n\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tservicesGet.audience.on(\"memberRemoved\", () => {\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\n\t\tmembers = servicesGet.audience.getMembers();\n\t\tassert.strictEqual(members.size, 1, \"We should have one member left at this point.\");\n\t});\n});\n"]}
1
+ {"version":3,"file":"audience.spec.js","sourceRoot":"","sources":["../../src/test/audience.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 { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { ConfigTypes, IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport type { ContainerSchema } from \"@fluidframework/fluid-static\";\nimport { SharedMap } from \"@fluidframework/map/internal\";\nimport type { OdspClient } from \"@fluidframework/odsp-client/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport { createOdspClient, getCredentials } from \"./OdspClientFactory.js\";\nimport { waitForMember } from \"./utils.js\";\n\nconst configProvider = (settings: Record<string, ConfigTypes>): IConfigProviderBase => ({\n\tgetRawConfig: (name: string): ConfigTypes => settings[name],\n});\n\ndescribe(\"Fluid audience\", () => {\n\tconst connectTimeoutMs = 10_000;\n\tlet client: OdspClient;\n\tlet schema: ContainerSchema;\n\tconst [client1Creds, client2Creds] = getCredentials();\n\n\tif (client1Creds === undefined || client2Creds === undefined) {\n\t\tthrow new Error(\"Couldn't get login credentials\");\n\t}\n\n\tbeforeEach(() => {\n\t\tclient = createOdspClient(client1Creds);\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: Find original member/self\n\t *\n\t * Expected behavior: container should have a single member upon creation.\n\t */\n\tit(\"can find original member\", async () => {\n\t\tconst { container, services } = await client.createContainer(schema);\n\t\tconst itemId = 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 itemId, \"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\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst myself = await waitForMember(services.audience, client1Creds.email);\n\t\tassert.notStrictEqual(myself, undefined, \"We should have myself at this point.\");\n\n\t\tconst members = services.audience.getMembers();\n\t\tassert.strictEqual(members.size, 1, \"We should have only one member at this point.\");\n\t});\n\n\t/**\n\t * Scenario: Find partner member\n\t *\n\t * Expected behavior: upon resolving container, the partner member should be able\n\t * to resolve original member.\n\t *\n\t * Note: This test is currently skipped because the web app examples indicate the audience is functioning properly. AB#6425\n\t */\n\tit.skip(\"can find partner member\", async () => {\n\t\tconst { container, services } = await client.createContainer(schema);\n\t\tconst itemId = 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 itemId, \"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\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst originalSelf = await waitForMember(services.audience, client1Creds.email);\n\t\tassert.notStrictEqual(originalSelf, undefined, \"We should have myself at this point.\");\n\n\t\t// pass client2 credentials\n\t\tconst client2 = createOdspClient(\n\t\t\tclient2Creds,\n\t\t\tundefined,\n\t\t\tconfigProvider({\n\t\t\t\t\"Fluid.Container.ForceWriteConnection\": true,\n\t\t\t}),\n\t\t);\n\t\tconst { services: servicesGet } = await client2.getContainer(itemId, schema);\n\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst partner = await waitForMember(servicesGet.audience, client2Creds.email);\n\t\tassert.notStrictEqual(partner, undefined, \"We should have partner at this point.\");\n\n\t\tconst members = servicesGet.audience.getMembers();\n\t\tassert.strictEqual(members.size, 2, \"We should have two members at this point.\");\n\n\t\tassert.notStrictEqual(\n\t\t\tpartner?.id,\n\t\t\toriginalSelf?.id,\n\t\t\t\"Self and partner should have different IDs\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: Partner should be able to observe change in audience\n\t *\n\t * Expected behavior: upon 1 partner leaving, other parther should observe\n\t * memberRemoved event and have correct partner count.\n\t *\n\t * Note: This test is currently skipped because the web app examples indicate the audience is functioning properly. AB#6425\n\t */\n\tit.skip(\"can observe member leaving\", async () => {\n\t\tconst { container } = await client.createContainer(schema);\n\t\tconst itemId = 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\t// pass client2 siteUrl and driveId\n\t\tconst client2 = createOdspClient(\n\t\t\tclient2Creds,\n\t\t\tundefined,\n\t\t\tconfigProvider({\n\t\t\t\t\"Fluid.Container.ForceWriteConnection\": true,\n\t\t\t}),\n\t\t);\n\t\tconst { services: servicesGet } = await client2.getContainer(itemId, schema);\n\n\t\t/* This is a workaround for a known bug, we should have one member (self) upon container connection */\n\t\tconst partner = await waitForMember(servicesGet.audience, client2Creds.email);\n\t\tassert.notStrictEqual(partner, undefined, \"We should have partner at this point.\");\n\n\t\tlet members = servicesGet.audience.getMembers();\n\t\tassert.strictEqual(members.size, 2, \"We should have two members at this point.\");\n\n\t\tcontainer.disconnect();\n\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tservicesGet.audience.on(\"memberRemoved\", () => {\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\n\t\tmembers = servicesGet.audience.getMembers();\n\t\tassert.strictEqual(members.size, 1, \"We should have one member left at this point.\");\n\t});\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"containerCreate.spec.js","sourceRoot":"","sources":["../../src/test/containerCreate.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE1E,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC3C,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAChC,IAAI,MAAkB,CAAC;IACvB,IAAI,MAAuB,CAAC;IAE5B,MAAM,CAAC,WAAW,CAAC,GAAG,cAAc,EAAE,CAAC;IAEvC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACnD,CAAC;IAED,UAAU,CAAC,GAAG,EAAE;QACf,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,GAAG;YACR,cAAc,EAAE;gBACf,IAAI,EAAE,SAAS;aACf;SACD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;;;;;OAMG;IACH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CACjB,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,QAAQ,EACpB,8BAA8B,CAC9B,CAAC;QAEF,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,OAAO,MAAM,EAAE,QAAQ,EAAE,mCAAmC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;QAExC,IAAI,SAAS,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YAC7D,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;gBAC/E,UAAU,EAAE,gBAAgB;gBAC5B,QAAQ,EAAE,6BAA6B;aACvC,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,OAAO,MAAM,EAAE,QAAQ,EAAE,mCAAmC,CAAC,CAAC;QACjF,MAAM,CAAC,WAAW,CACjB,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,QAAQ,EACpB,kDAAkD,CAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;QAExC,IAAI,SAAS,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YAC7D,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;gBAC/E,UAAU,EAAE,gBAAgB;gBAC5B,QAAQ,EAAE,6BAA6B;aACvC,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,OAAO,MAAM,EAAE,QAAQ,EAAE,mCAAmC,CAAC,CAAC;QACjF,MAAM,CAAC,WAAW,CACjB,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,QAAQ,EACpB,8CAA8C,CAC9C,CAAC;QACF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;QAE3C,IAAI,YAAY,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YAChE,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;gBAClF,UAAU,EAAE,gBAAgB;gBAC5B,QAAQ,EAAE,6BAA6B;aACvC,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,MAAM,CAAC,aAAa,CACzB,SAAS,EACT,GAAG,EAAE,CAAC,IAAI,EACV,yCAAyC,CACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;;;OAIG;IACH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAG,CAAC,KAAY,EAAW,EAAE;YACzC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,gCAAgC,CAAC,CAAC;YAClF,MAAM,CAAC,MAAM,CACZ,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAClD,qBAAqB,KAAK,CAAC,OAAO,EAAE,CACpC,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,MAAM,CAAC,OAAO,CACnB,qBAAqB,EACrB,OAAO,EACP,+CAA+C,CAC/C,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","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 { ConnectionState } from \"@fluidframework/container-loader\";\nimport { ContainerSchema } from \"@fluidframework/fluid-static\";\nimport { SharedMap } from \"@fluidframework/map/internal\";\nimport { OdspClient } from \"@fluidframework/odsp-client/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport { createOdspClient, getCredentials } from \"./OdspClientFactory.js\";\n\ndescribe(\"Container create scenarios\", () => {\n\tconst connectTimeoutMs = 10_000;\n\tlet client: OdspClient;\n\tlet schema: ContainerSchema;\n\n\tconst [clientCreds] = getCredentials();\n\n\tif (clientCreds === undefined) {\n\t\tthrow new Error(\"Couldn't get login credentials\");\n\t}\n\n\tbeforeEach(() => {\n\t\tclient = createOdspClient(clientCreds);\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 an Odsp 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\n\t\t// Make sure we can attach.\n\t\tconst itemId = await container.attach();\n\t\tassert.strictEqual(typeof itemId, \"string\", \"Attach did not return a string ID\");\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 itemId = 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 itemId, \"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 itemId = 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 itemId, \"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 Odsp 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 ODSP container successfully\", async () => {\n\t\tconst { container: newContainer } = await client.createContainer(schema);\n\t\tconst itemId = 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(itemId, schema);\n\t\tawait assert.doesNotReject(\n\t\t\tresources,\n\t\t\t() => true,\n\t\t\t\"container cannot be retrieved from ODSP\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if Odsp 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 containerAndServicesP = client.getContainer(\"containerConfig\", schema);\n\n\t\tconst errorFn = (error: Error): boolean => {\n\t\t\tassert.notStrictEqual(error.message, undefined, \"Odsp Client error is undefined\");\n\t\t\tassert.strict(\n\t\t\t\terror.message.startsWith(\"ODSP fetch error [400]\"),\n\t\t\t\t`Unexpected error: ${error.message}`,\n\t\t\t);\n\t\t\treturn true;\n\t\t};\n\n\t\tawait assert.rejects(\n\t\t\tcontainerAndServicesP,\n\t\t\terrorFn,\n\t\t\t\"Odsp Client can load a non-existent container\",\n\t\t);\n\t});\n});\n"]}
1
+ {"version":3,"file":"containerCreate.spec.js","sourceRoot":"","sources":["../../src/test/containerCreate.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 { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { ContainerSchema } from \"@fluidframework/fluid-static\";\nimport { SharedMap } from \"@fluidframework/map/internal\";\nimport type { OdspClient } from \"@fluidframework/odsp-client/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport { createOdspClient, getCredentials } from \"./OdspClientFactory.js\";\n\ndescribe(\"Container create scenarios\", () => {\n\tconst connectTimeoutMs = 10_000;\n\tlet client: OdspClient;\n\tlet schema: ContainerSchema;\n\n\tconst [clientCreds] = getCredentials();\n\n\tif (clientCreds === undefined) {\n\t\tthrow new Error(\"Couldn't get login credentials\");\n\t}\n\n\tbeforeEach(() => {\n\t\tclient = createOdspClient(clientCreds);\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 an Odsp 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\n\t\t// Make sure we can attach.\n\t\tconst itemId = await container.attach();\n\t\tassert.strictEqual(typeof itemId, \"string\", \"Attach did not return a string ID\");\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 itemId = 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 itemId, \"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 itemId = 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 itemId, \"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 Odsp 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 ODSP container successfully\", async () => {\n\t\tconst { container: newContainer } = await client.createContainer(schema);\n\t\tconst itemId = 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(itemId, schema);\n\t\tawait assert.doesNotReject(\n\t\t\tresources,\n\t\t\t() => true,\n\t\t\t\"container cannot be retrieved from ODSP\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if Odsp 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 containerAndServicesP = client.getContainer(\"containerConfig\", schema);\n\n\t\tconst errorFn = (error: Error): boolean => {\n\t\t\tassert.notStrictEqual(error.message, undefined, \"Odsp Client error is undefined\");\n\t\t\tassert.strict(\n\t\t\t\terror.message.startsWith(\"ODSP fetch error [400]\"),\n\t\t\t\t`Unexpected error: ${error.message}`,\n\t\t\t);\n\t\t\treturn true;\n\t\t};\n\n\t\tawait assert.rejects(\n\t\t\tcontainerAndServicesP,\n\t\t\terrorFn,\n\t\t\t\"Odsp Client can load a non-existent container\",\n\t\t);\n\t});\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ddsTests.spec.js","sourceRoot":"","sources":["../../src/test/ddsTests.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 { ConnectionState } from \"@fluidframework/container-loader\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { ContainerSchema } from \"@fluidframework/fluid-static\";\nimport { SharedMap } from \"@fluidframework/map/internal\";\nimport { OdspClient } from \"@fluidframework/odsp-client/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport { createOdspClient, getCredentials } from \"./OdspClientFactory.js\";\nimport { CounterTestDataObject, TestDataObject } from \"./TestDataObject.js\";\nimport { mapWait } from \"./utils.js\";\n\ndescribe(\"Fluid data updates\", () => {\n\tconst connectTimeoutMs = 10_000;\n\tlet client: OdspClient;\n\tconst schema = {\n\t\tinitialObjects: {\n\t\t\tmap1: SharedMap,\n\t\t},\n\t} satisfies ContainerSchema;\n\n\tconst [clientCreds] = getCredentials();\n\n\tif (clientCreds === undefined) {\n\t\tthrow new Error(\"Couldn't get login credentials\");\n\t}\n\n\tbeforeEach(() => {\n\t\tclient = createOdspClient(clientCreds);\n\t});\n\n\t/**\n\t * Scenario: test when an Odsp Client container is created,\n\t * it can set the initial objects.\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 set DDSes as initial objects for a container\", async () => {\n\t\tconst { container: newContainer } = await client.createContainer(schema);\n\t\tconst itemId = 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(itemId, schema);\n\t\tawait assert.doesNotReject(\n\t\t\tresources,\n\t\t\t() => true,\n\t\t\t\"container cannot be retrieved from ODSP\",\n\t\t);\n\n\t\tconst { container } = await resources;\n\t\tassert.deepStrictEqual(\n\t\t\tObject.keys(container.initialObjects),\n\t\t\tObject.keys(schema.initialObjects),\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if initialObjects passed into the container functions correctly.\n\t *\n\t * Expected behavior: initialObjects value loaded in two different containers should mirror\n\t * each other after value is changed.\n\t */\n\tit(\"can change DDSes within initialObjects value\", async () => {\n\t\tconst { container } = await client.createContainer(schema);\n\t\tconst itemId = 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\tconst initialObjectsCreate = container.initialObjects;\n\t\tconst map1Create = initialObjectsCreate.map1;\n\t\tmap1Create.set(\"new-key\", \"new-value\");\n\t\tconst valueCreate: string | undefined = map1Create.get(\"new-key\");\n\n\t\tconst { container: containerGet } = await client.getContainer(itemId, schema);\n\t\tconst map1Get = containerGet.initialObjects.map1;\n\t\tconst valueGet: string | undefined = await mapWait(map1Get, \"new-key\");\n\t\tassert.strictEqual(valueGet, valueCreate, \"container can't change initial objects\");\n\t});\n\n\t/**\n\t * Scenario: test if we can create DataObjects through initialObjects schema.\n\t *\n\t * Expected behavior: DataObjects can be retrieved from the original and loaded container.\n\t */\n\tit(\"can set DataObjects as initial objects for a container\", async () => {\n\t\tconst doSchema: ContainerSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmdo1: TestDataObject,\n\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t},\n\t\t};\n\t\tconst { container } = await client.createContainer(doSchema);\n\t\tconst itemId = 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\tconst initialObjectsCreate = container.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\n\t\tconst { container: containerGet } = await client.getContainer(itemId, doSchema);\n\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if we can create multiple DataObjects of the same type\n\t *\n\t * Expected behavior: DataObjects of the same type can be retrieved from the\n\t * original and loaded container.\n\t * TODO: Known bug that needs to be re-tested once fixed.\n\t */\n\tit(\"can use multiple DataObjects of the same type\", async () => {\n\t\tconst doSchema: ContainerSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmdo1: TestDataObject,\n\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\tmdo3: CounterTestDataObject,\n\t\t\t},\n\t\t};\n\t\tconst { container } = await client.createContainer(doSchema);\n\t\tconst itemId = 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\tconst initialObjectsCreate = container.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo3\",\n\t\t);\n\n\t\tconst { container: containerGet } = await client.getContainer(itemId, doSchema);\n\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo3\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if we can change DataObject value contained within initialObjects\n\t *\n\t * Expected behavior: DataObject changes are correctly reflected on original and loaded containers\n\t */\n\tit(\"can change DataObjects within initialObjects value\", async () => {\n\t\tconst doSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmdo1: TestDataObject,\n\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\t\tconst { container } = await client.createContainer(doSchema);\n\t\tconst initialObjectsCreate = container.initialObjects;\n\t\tconst mdo2: CounterTestDataObject = initialObjectsCreate.mdo2;\n\t\tmdo2.increment();\n\t\tmdo2.increment();\n\t\tmdo2.increment();\n\n\t\tassert.strictEqual(mdo2.value, 3);\n\n\t\tconst itemId = 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\tconst { container: containerGet } = await client.getContainer(itemId, doSchema);\n\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\tconst mdo2get: CounterTestDataObject = initialObjectsGet.mdo2;\n\n\t\tassert.strictEqual(mdo2get.value, 3);\n\n\t\tmdo2get.increment();\n\t\tmdo2get.increment();\n\t\tassert.strictEqual(mdo2get.value, 5);\n\t});\n\n\t/**\n\t * Scenario: test if the optional schema parameter, dynamicObjectTypes (custom data objects),\n\t * can be added during runtime and be returned by the container.\n\t *\n\t * Expected behavior: added loadable object can be retrieved from the container. Loadable\n\t * object's id and container config ID should be identical since it's now attached to\n\t * the container.\n\t */\n\tit(\"can create/add loadable objects (custom data object) dynamically during runtime\", async () => {\n\t\tconst dynamicSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t\tdynamicObjectTypes: [TestDataObject],\n\t\t} satisfies ContainerSchema;\n\n\t\tconst { container } = await client.createContainer(dynamicSchema);\n\t\tawait container.attach();\n\n\t\tconst newDo = await container.create(TestDataObject);\n\t\tassert.ok(newDo?.handle);\n\n\t\tconst map1 = container.initialObjects.map1;\n\t\tmap1.set(\"new-pair-id\", newDo.handle);\n\t\tconst handle: IFluidHandle | undefined = await map1.get(\"new-pair-id\");\n\t\tconst obj: unknown = await handle?.get();\n\t\tassert.ok(obj, \"container added dynamic objects incorrectly\");\n\t});\n});\n"]}
1
+ {"version":3,"file":"ddsTests.spec.js","sourceRoot":"","sources":["../../src/test/ddsTests.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 { ConnectionState } from \"@fluidframework/container-loader\";\nimport type { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport type { ContainerSchema } from \"@fluidframework/fluid-static\";\nimport { SharedMap } from \"@fluidframework/map/internal\";\nimport type { OdspClient } from \"@fluidframework/odsp-client/internal\";\nimport { timeoutPromise } from \"@fluidframework/test-utils/internal\";\n\nimport { createOdspClient, getCredentials } from \"./OdspClientFactory.js\";\nimport { CounterTestDataObject, TestDataObject } from \"./TestDataObject.js\";\nimport { mapWait } from \"./utils.js\";\n\ndescribe(\"Fluid data updates\", () => {\n\tconst connectTimeoutMs = 10_000;\n\tlet client: OdspClient;\n\tconst schema = {\n\t\tinitialObjects: {\n\t\t\tmap1: SharedMap,\n\t\t},\n\t} satisfies ContainerSchema;\n\n\tconst [clientCreds] = getCredentials();\n\n\tif (clientCreds === undefined) {\n\t\tthrow new Error(\"Couldn't get login credentials\");\n\t}\n\n\tbeforeEach(() => {\n\t\tclient = createOdspClient(clientCreds);\n\t});\n\n\t/**\n\t * Scenario: test when an Odsp Client container is created,\n\t * it can set the initial objects.\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 set DDSes as initial objects for a container\", async () => {\n\t\tconst { container: newContainer } = await client.createContainer(schema);\n\t\tconst itemId = 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(itemId, schema);\n\t\tawait assert.doesNotReject(\n\t\t\tresources,\n\t\t\t() => true,\n\t\t\t\"container cannot be retrieved from ODSP\",\n\t\t);\n\n\t\tconst { container } = await resources;\n\t\tassert.deepStrictEqual(\n\t\t\tObject.keys(container.initialObjects),\n\t\t\tObject.keys(schema.initialObjects),\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if initialObjects passed into the container functions correctly.\n\t *\n\t * Expected behavior: initialObjects value loaded in two different containers should mirror\n\t * each other after value is changed.\n\t */\n\tit(\"can change DDSes within initialObjects value\", async () => {\n\t\tconst { container } = await client.createContainer(schema);\n\t\tconst itemId = 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\tconst initialObjectsCreate = container.initialObjects;\n\t\tconst map1Create = initialObjectsCreate.map1;\n\t\tmap1Create.set(\"new-key\", \"new-value\");\n\t\tconst valueCreate: string | undefined = map1Create.get(\"new-key\");\n\n\t\tconst { container: containerGet } = await client.getContainer(itemId, schema);\n\t\tconst map1Get = containerGet.initialObjects.map1;\n\t\tconst valueGet: string | undefined = await mapWait(map1Get, \"new-key\");\n\t\tassert.strictEqual(valueGet, valueCreate, \"container can't change initial objects\");\n\t});\n\n\t/**\n\t * Scenario: test if we can create DataObjects through initialObjects schema.\n\t *\n\t * Expected behavior: DataObjects can be retrieved from the original and loaded container.\n\t */\n\tit(\"can set DataObjects as initial objects for a container\", async () => {\n\t\tconst doSchema: ContainerSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmdo1: TestDataObject,\n\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t},\n\t\t};\n\t\tconst { container } = await client.createContainer(doSchema);\n\t\tconst itemId = 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\tconst initialObjectsCreate = container.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\n\t\tconst { container: containerGet } = await client.getContainer(itemId, doSchema);\n\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if we can create multiple DataObjects of the same type\n\t *\n\t * Expected behavior: DataObjects of the same type can be retrieved from the\n\t * original and loaded container.\n\t * TODO: Known bug that needs to be re-tested once fixed.\n\t */\n\tit(\"can use multiple DataObjects of the same type\", async () => {\n\t\tconst doSchema: ContainerSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmdo1: TestDataObject,\n\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t\tmdo3: CounterTestDataObject,\n\t\t\t},\n\t\t};\n\t\tconst { container } = await client.createContainer(doSchema);\n\t\tconst itemId = 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\tconst initialObjectsCreate = container.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo3\",\n\t\t);\n\n\t\tconst { container: containerGet } = await client.getContainer(itemId, doSchema);\n\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\tassert(\n\t\t\tinitialObjectsGet.mdo1 instanceof TestDataObject,\n\t\t\t\"container returns the wrong type for mdo1\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo2 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo2\",\n\t\t);\n\t\tassert(\n\t\t\tinitialObjectsCreate.mdo3 instanceof CounterTestDataObject,\n\t\t\t\"container returns the wrong type for mdo3\",\n\t\t);\n\t});\n\n\t/**\n\t * Scenario: test if we can change DataObject value contained within initialObjects\n\t *\n\t * Expected behavior: DataObject changes are correctly reflected on original and loaded containers\n\t */\n\tit(\"can change DataObjects within initialObjects value\", async () => {\n\t\tconst doSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmdo1: TestDataObject,\n\t\t\t\tmdo2: CounterTestDataObject,\n\t\t\t},\n\t\t} satisfies ContainerSchema;\n\t\tconst { container } = await client.createContainer(doSchema);\n\t\tconst initialObjectsCreate = container.initialObjects;\n\t\tconst mdo2: CounterTestDataObject = initialObjectsCreate.mdo2;\n\t\tmdo2.increment();\n\t\tmdo2.increment();\n\t\tmdo2.increment();\n\n\t\tassert.strictEqual(mdo2.value, 3);\n\n\t\tconst itemId = 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\tconst { container: containerGet } = await client.getContainer(itemId, doSchema);\n\t\tconst initialObjectsGet = containerGet.initialObjects;\n\t\tconst mdo2get: CounterTestDataObject = initialObjectsGet.mdo2;\n\n\t\tassert.strictEqual(mdo2get.value, 3);\n\n\t\tmdo2get.increment();\n\t\tmdo2get.increment();\n\t\tassert.strictEqual(mdo2get.value, 5);\n\t});\n\n\t/**\n\t * Scenario: test if the optional schema parameter, dynamicObjectTypes (custom data objects),\n\t * can be added during runtime and be returned by the container.\n\t *\n\t * Expected behavior: added loadable object can be retrieved from the container. Loadable\n\t * object's id and container config ID should be identical since it's now attached to\n\t * the container.\n\t */\n\tit(\"can create/add loadable objects (custom data object) dynamically during runtime\", async () => {\n\t\tconst dynamicSchema = {\n\t\t\tinitialObjects: {\n\t\t\t\tmap1: SharedMap,\n\t\t\t},\n\t\t\tdynamicObjectTypes: [TestDataObject],\n\t\t} satisfies ContainerSchema;\n\n\t\tconst { container } = await client.createContainer(dynamicSchema);\n\t\tawait container.attach();\n\n\t\tconst newDo = await container.create(TestDataObject);\n\t\tassert.ok(newDo?.handle);\n\n\t\tconst map1 = container.initialObjects.map1;\n\t\tmap1.set(\"new-pair-id\", newDo.handle);\n\t\tconst handle: IFluidHandle | undefined = await map1.get(\"new-pair-id\");\n\t\tconst obj: unknown = await handle?.get();\n\t\tassert.ok(obj, \"container added dynamic objects incorrectly\");\n\t});\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,QAAuB,EACvB,QAAgB,EACM,EAAE;IACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,SAAqB,EAAQ,EAAE;YACjE,IAAI,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpB,CAAC;QACF,CAAC,CAAC;QACF,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAK,GAAe,EAAE,GAAW,EAAc,EAAE;IAC5E,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;IACnC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,CAAC,OAAsB,EAAQ,EAAE;YAChD,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACzB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAI,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACF,CAAC,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISharedMap, IValueChanged } from \"@fluidframework/map/internal\";\nimport { IOdspAudience, OdspMember } from \"@fluidframework/odsp-client/internal\";\n\nexport const waitForMember = async (\n\taudience: IOdspAudience,\n\tusername: string,\n): Promise<OdspMember> => {\n\tconst allMembers = audience.getMembers();\n\tconst member = allMembers.get(username);\n\tif (member !== undefined) {\n\t\treturn member;\n\t}\n\treturn new Promise((resolve) => {\n\t\tconst handler = (clientId: string, newMember: OdspMember): void => {\n\t\t\tif (newMember.email === username) {\n\t\t\t\tresolve(newMember);\n\t\t\t}\n\t\t};\n\t\taudience.on(\"memberAdded\", handler);\n\t});\n};\n\nexport const mapWait = async <T>(map: ISharedMap, key: string): Promise<T> => {\n\tconst maybeValue = map.get<T>(key);\n\tif (maybeValue !== undefined) {\n\t\treturn maybeValue;\n\t}\n\n\treturn new Promise((resolve) => {\n\t\tconst handler = (changed: IValueChanged): void => {\n\t\t\tif (changed.key === key) {\n\t\t\t\tmap.off(\"valueChanged\", handler);\n\t\t\t\tconst value = map.get<T>(changed.key);\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tthrow new Error(\"Unexpected valueChanged result\");\n\t\t\t\t}\n\t\t\t\tresolve(value);\n\t\t\t}\n\t\t};\n\t\tmap.on(\"valueChanged\", handler);\n\t});\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,QAAuB,EACvB,QAAgB,EACM,EAAE;IACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,SAAqB,EAAQ,EAAE;YACjE,IAAI,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpB,CAAC;QACF,CAAC,CAAC;QACF,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAK,GAAe,EAAE,GAAW,EAAc,EAAE;IAC5E,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;IACnC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,CAAC,OAAsB,EAAQ,EAAE;YAChD,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACzB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAI,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACF,CAAC,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { ISharedMap, IValueChanged } from \"@fluidframework/map/internal\";\nimport type { IOdspAudience, OdspMember } from \"@fluidframework/odsp-client/internal\";\n\nexport const waitForMember = async (\n\taudience: IOdspAudience,\n\tusername: string,\n): Promise<OdspMember> => {\n\tconst allMembers = audience.getMembers();\n\tconst member = allMembers.get(username);\n\tif (member !== undefined) {\n\t\treturn member;\n\t}\n\treturn new Promise((resolve) => {\n\t\tconst handler = (clientId: string, newMember: OdspMember): void => {\n\t\t\tif (newMember.email === username) {\n\t\t\t\tresolve(newMember);\n\t\t\t}\n\t\t};\n\t\taudience.on(\"memberAdded\", handler);\n\t});\n};\n\nexport const mapWait = async <T>(map: ISharedMap, key: string): Promise<T> => {\n\tconst maybeValue = map.get<T>(key);\n\tif (maybeValue !== undefined) {\n\t\treturn maybeValue;\n\t}\n\n\treturn new Promise((resolve) => {\n\t\tconst handler = (changed: IValueChanged): void => {\n\t\t\tif (changed.key === key) {\n\t\t\t\tmap.off(\"valueChanged\", handler);\n\t\t\t\tconst value = map.get<T>(changed.key);\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tthrow new Error(\"Unexpected valueChanged result\");\n\t\t\t\t}\n\t\t\t\tresolve(value);\n\t\t\t}\n\t\t};\n\t\tmap.on(\"valueChanged\", handler);\n\t});\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-experimental/odsp-end-to-end-tests",
3
- "version": "2.51.0-347100",
3
+ "version": "2.52.0",
4
4
  "description": "Odsp client end to end tests",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -33,22 +33,22 @@
33
33
  "temp-directory": "nyc/.nyc_output"
34
34
  },
35
35
  "dependencies": {
36
- "@fluid-internal/mocha-test-setup": "2.51.0-347100",
37
- "@fluid-private/test-version-utils": "2.51.0-347100",
38
- "@fluidframework/aqueduct": "2.51.0-347100",
39
- "@fluidframework/container-definitions": "2.51.0-347100",
40
- "@fluidframework/container-loader": "2.51.0-347100",
41
- "@fluidframework/core-interfaces": "2.51.0-347100",
42
- "@fluidframework/counter": "2.51.0-347100",
43
- "@fluidframework/fluid-static": "2.51.0-347100",
44
- "@fluidframework/map": "2.51.0-347100",
45
- "@fluidframework/matrix": "2.51.0-347100",
46
- "@fluidframework/odsp-client": "2.51.0-347100",
47
- "@fluidframework/odsp-doclib-utils": "2.51.0-347100",
48
- "@fluidframework/odsp-driver-definitions": "2.51.0-347100",
49
- "@fluidframework/sequence": "2.51.0-347100",
50
- "@fluidframework/telemetry-utils": "2.51.0-347100",
51
- "@fluidframework/test-utils": "2.51.0-347100",
36
+ "@fluid-internal/mocha-test-setup": "~2.52.0",
37
+ "@fluid-private/test-version-utils": "~2.52.0",
38
+ "@fluidframework/aqueduct": "~2.52.0",
39
+ "@fluidframework/container-definitions": "~2.52.0",
40
+ "@fluidframework/container-loader": "~2.52.0",
41
+ "@fluidframework/core-interfaces": "~2.52.0",
42
+ "@fluidframework/counter": "~2.52.0",
43
+ "@fluidframework/fluid-static": "~2.52.0",
44
+ "@fluidframework/map": "~2.52.0",
45
+ "@fluidframework/matrix": "~2.52.0",
46
+ "@fluidframework/odsp-client": "~2.52.0",
47
+ "@fluidframework/odsp-doclib-utils": "~2.52.0",
48
+ "@fluidframework/odsp-driver-definitions": "~2.52.0",
49
+ "@fluidframework/sequence": "~2.52.0",
50
+ "@fluidframework/telemetry-utils": "~2.52.0",
51
+ "@fluidframework/test-utils": "~2.52.0",
52
52
  "@types/sinon": "^17.0.3",
53
53
  "mocha": "^10.8.2",
54
54
  "mocha-multi-reporters": "^1.5.1",
@@ -58,7 +58,7 @@
58
58
  "devDependencies": {
59
59
  "@biomejs/biome": "~1.9.3",
60
60
  "@fluidframework/build-common": "^2.0.3",
61
- "@fluidframework/build-tools": "^0.56.0",
61
+ "@fluidframework/build-tools": "^0.57.0",
62
62
  "@fluidframework/eslint-config-fluid": "^5.7.4",
63
63
  "@types/mocha": "^10.0.10",
64
64
  "@types/nock": "^9.3.0",
@@ -3,13 +3,13 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import {
6
+ import type {
7
7
  IConfigProviderBase,
8
- type ITelemetryBaseLogger,
8
+ ITelemetryBaseLogger,
9
9
  } from "@fluidframework/core-interfaces";
10
- import { OdspClient, OdspConnectionConfig } from "@fluidframework/odsp-client/internal";
10
+ import { OdspClient, type OdspConnectionConfig } from "@fluidframework/odsp-client/internal";
11
11
  import {
12
- MockLogger,
12
+ type MockLogger,
13
13
  createChildLogger,
14
14
  createMultiSinkLogger,
15
15
  } from "@fluidframework/telemetry-utils/internal";
@@ -6,16 +6,16 @@
6
6
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
7
7
  /* eslint-disable @typescript-eslint/no-unsafe-member-access */
8
8
 
9
- import { IOdspTokenProvider } from "@fluidframework/odsp-client/internal";
9
+ import type { IOdspTokenProvider } from "@fluidframework/odsp-client/internal";
10
10
  import {
11
- IPublicClientConfig,
12
- TokenRequestCredentials,
11
+ type IPublicClientConfig,
12
+ type TokenRequestCredentials,
13
13
  getFetchTokenUrl,
14
14
  unauthPostAsync,
15
15
  } from "@fluidframework/odsp-doclib-utils/internal";
16
- import { TokenResponse } from "@fluidframework/odsp-driver-definitions/internal";
16
+ import type { TokenResponse } from "@fluidframework/odsp-driver-definitions/internal";
17
17
 
18
- import { IOdspCredentials } from "./OdspClientFactory.js";
18
+ import type { IOdspCredentials } from "./OdspClientFactory.js";
19
19
 
20
20
  /**
21
21
  * This class implements the IOdspTokenProvider interface and provides methods for fetching push and storage tokens.
@@ -6,10 +6,10 @@
6
6
  import {
7
7
  DataObject,
8
8
  DataObjectFactory,
9
- IDataObjectProps,
9
+ type IDataObjectProps,
10
10
  createDataObjectKind,
11
11
  } from "@fluidframework/aqueduct/internal";
12
- import { IFluidHandle } from "@fluidframework/core-interfaces";
12
+ import type { IFluidHandle } from "@fluidframework/core-interfaces";
13
13
  import { SharedCounter } from "@fluidframework/counter/internal";
14
14
 
15
15
  class TestDataObjectClass extends DataObject {
@@ -7,10 +7,10 @@ import { strict as assert } from "node:assert";
7
7
 
8
8
  import { AttachState } from "@fluidframework/container-definitions";
9
9
  import { ConnectionState } from "@fluidframework/container-loader";
10
- import { ConfigTypes, IConfigProviderBase } from "@fluidframework/core-interfaces";
11
- import { ContainerSchema } from "@fluidframework/fluid-static";
10
+ import type { ConfigTypes, IConfigProviderBase } from "@fluidframework/core-interfaces";
11
+ import type { ContainerSchema } from "@fluidframework/fluid-static";
12
12
  import { SharedMap } from "@fluidframework/map/internal";
13
- import { OdspClient } from "@fluidframework/odsp-client/internal";
13
+ import type { OdspClient } from "@fluidframework/odsp-client/internal";
14
14
  import { timeoutPromise } from "@fluidframework/test-utils/internal";
15
15
 
16
16
  import { createOdspClient, getCredentials } from "./OdspClientFactory.js";
@@ -7,9 +7,9 @@ import { strict as assert } from "node:assert";
7
7
 
8
8
  import { AttachState } from "@fluidframework/container-definitions";
9
9
  import { ConnectionState } from "@fluidframework/container-loader";
10
- import { ContainerSchema } from "@fluidframework/fluid-static";
10
+ import type { ContainerSchema } from "@fluidframework/fluid-static";
11
11
  import { SharedMap } from "@fluidframework/map/internal";
12
- import { OdspClient } from "@fluidframework/odsp-client/internal";
12
+ import type { OdspClient } from "@fluidframework/odsp-client/internal";
13
13
  import { timeoutPromise } from "@fluidframework/test-utils/internal";
14
14
 
15
15
  import { createOdspClient, getCredentials } from "./OdspClientFactory.js";
@@ -6,10 +6,10 @@
6
6
  import { strict as assert } from "node:assert";
7
7
 
8
8
  import { ConnectionState } from "@fluidframework/container-loader";
9
- import { IFluidHandle } from "@fluidframework/core-interfaces";
10
- import { ContainerSchema } from "@fluidframework/fluid-static";
9
+ import type { IFluidHandle } from "@fluidframework/core-interfaces";
10
+ import type { ContainerSchema } from "@fluidframework/fluid-static";
11
11
  import { SharedMap } from "@fluidframework/map/internal";
12
- import { OdspClient } from "@fluidframework/odsp-client/internal";
12
+ import type { OdspClient } from "@fluidframework/odsp-client/internal";
13
13
  import { timeoutPromise } from "@fluidframework/test-utils/internal";
14
14
 
15
15
  import { createOdspClient, getCredentials } from "./OdspClientFactory.js";
package/src/test/utils.ts CHANGED
@@ -3,8 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ISharedMap, IValueChanged } from "@fluidframework/map/internal";
7
- import { IOdspAudience, OdspMember } from "@fluidframework/odsp-client/internal";
6
+ import type { ISharedMap, IValueChanged } from "@fluidframework/map/internal";
7
+ import type { IOdspAudience, OdspMember } from "@fluidframework/odsp-client/internal";
8
8
 
9
9
  export const waitForMember = async (
10
10
  audience: IOdspAudience,