{"_id":"@fluidframework/test-client-utils","_rev":"260-2094b5f540b5206266de824b98b57f51","name":"@fluidframework/test-client-utils","dist-tags":{"next":"2.0.0-dev.5.2.0.169897","canary":"2.0.0-internal.4.3.2","latest":"1.4.0"},"versions":{"0.48.0-38105":{"name":"@fluidframework/test-client-utils","version":"0.48.0-38105","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.0-38105","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"199fd7d60adcf4ab4c6363c4fdb4bf229663fa8a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.0-38105.tgz","fileCount":25,"integrity":"sha512-/BLW0kvPLKuzjmbJeK031Ht/cxM7Yxctko9iSOCCHdRS1GGYYi5VNHCFE0OMrPy6LyW3g2wkN/8Z7e54t+3FGA==","signatures":[{"sig":"MEUCIAUo5uvD9AbUkplTAoepNkeobexOXjfElyjE+hiLylpFAiEAvQj8JXtFX2uilUAoKEdUMqS14aYR8MvLg6VdkLkihso=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13132},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.0-38105.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0-0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/test-runtime-utils":"0.48.0-38105","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.0-38105_1632173106770_0.7259480688144679","host":"s3://npm-registry-packages"}},"0.48.0-38142":{"name":"@fluidframework/test-client-utils","version":"0.48.0-38142","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.0-38142","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"827639dd4e7ebf57ff150c7654bf0882785d477b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.0-38142.tgz","fileCount":25,"integrity":"sha512-vL7Np5sqwwNjXJcy72HhDwf3G7pejqlbRCrUK7+CtldBXbmT0u4o51NR9442f6CmtNYfcRX7DKSfP2cxgoo0UQ==","signatures":[{"sig":"MEQCIHfawdntSogOyPEdCFtB99GFL8kw0dCRj+o8qMmOWe8WAiA+dYCh+Tyvdy8kIUghOhafCZ8W2TEOJ/Ugd9NJGtea8A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13132},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.0-38142.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0-0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/test-runtime-utils":"0.48.0-38142","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.0-38142_1632240191956_0.15939614716718342","host":"s3://npm-registry-packages"}},"0.48.0":{"name":"@fluidframework/test-client-utils","version":"0.48.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"3ec73ad8f12eddc9011a36ff6ad0f0e60cb3216d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.0.tgz","fileCount":25,"integrity":"sha512-SpruMo52hbbQGWhaSYFFothTfYyCV7eHPuxO3AuCxH1Z1dsqFkrIYJGdeKS7xnhIC/tdFOO4hz2yLb4Nz9sOAg==","signatures":[{"sig":"MEYCIQDXuipjfgL4sBcahnaJx1IkkSUaaZfpBscvzpYhUd8eawIhALrzCPPkPnnSE5PQrrwqB1+zBWKJYKad0kbOuPiDuK+p","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13073},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/test-runtime-utils":"^0.48.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.0_1632255030896_0.8062339147382303","host":"s3://npm-registry-packages"}},"0.48.1":{"name":"@fluidframework/test-client-utils","version":"0.48.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b4ef133330489045ba7253d45436ff3417e25ba6","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.1.tgz","fileCount":25,"integrity":"sha512-ZnVOeZpTIwDW4YVJXwen3swLr/OUGUAU8DSH5V9UISYMuW8P7Nd+6VE1Fyl3n5uM+RnuCDhXuUhaqRHT5tlZ9g==","signatures":[{"sig":"MEUCIQC+pN/da593VcbcvlbxUDwmQiLYLPJYLtb8nrw7Tde9AgIgYpCZ2+OpEQcqDki9x/0/od6aTx/kv9C0zzeMt3tR9xk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13097},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.48.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.1_1632436298187_0.643051319662103","host":"s3://npm-registry-packages"}},"0.48.2":{"name":"@fluidframework/test-client-utils","version":"0.48.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b34e9556b5dd253fb53ac92e9733c5934b519c3c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.2.tgz","fileCount":25,"integrity":"sha512-5tTaSjID10jU9GF4qxyKjbfw24gbcfAJT7tgeSdpU0WYe3mEJHd7YwgfQCY3UtF2dtpGmzFJbqKLVrD6nlLYjA==","signatures":[{"sig":"MEQCIB4l/p9vo7jOnK4bab7LTto0/MHvJCPsGwzg2ryl8XtwAiB2o7ZWJLG+wXVXB/Vf79RpFO1U3I6xDSTXFYGvF+E9sQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13097},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.48.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.2_1632772795862_0.5337104328640607","host":"s3://npm-registry-packages"}},"0.48.3":{"name":"@fluidframework/test-client-utils","version":"0.48.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2d5608513675650a5fa25947998e872e7b6514b2","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.3.tgz","fileCount":25,"integrity":"sha512-CyPI2SOxbsDaBTziF0hG0DK0tkiVZzyjsZ795G5UrQuc9BvrIzd6FGar2sCqcwry1lBV4ZkusUzavi74GguYJQ==","signatures":[{"sig":"MEUCIQC4egNbrP987SXoN8HW3NhA/T4IeylZBY+7kYAfSApRnAIgNGRRw0rb2fokO/gN5xRvTmn25TbkoHyFrIld+mFlemI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13097},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.48.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.3_1633033936688_0.7459085092746118","host":"s3://npm-registry-packages"}},"0.49.0-39015":{"name":"@fluidframework/test-client-utils","version":"0.49.0-39015","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.49.0-39015","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f7459d195f93b11d439015d8f9cf87707fc6b762","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.49.0-39015.tgz","fileCount":25,"integrity":"sha512-vKrHqLhtSyt+D6Q6vJaL3hx3tKaOZkCM+htP+jz8HEx7enhpbzGtI25e179xPY/9hKZL1Z1u+OzAJkZ8680/aQ==","signatures":[{"sig":"MEYCIQDiTfZv7Q/haO/b6G5niLmUbsMUsrE7hEuT3U79b9FIRQIhANaQVqWP/6Me+S2DigIAqnucrZr7SuacMwHe9jKeEYKx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13154},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.49.0-39015.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"0.49.0-39015"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.49.0-39015_1633039359208_0.1908423622980704","host":"s3://npm-registry-packages"}},"0.48.4":{"name":"@fluidframework/test-client-utils","version":"0.48.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.4","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"809a1def4a2994d15554759778224a98704eb314","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.4.tgz","fileCount":25,"integrity":"sha512-ZUA7ugSvSaAG6UQooinV5wtSgL2skqvFHs/OdT1jy5HaH8rKv6Vu8V7YaY/rySlrfyuWjWFtEPa5b0r2of5tMg==","signatures":[{"sig":"MEQCIFr0WVMwOf8KeVc5v+eKI9r+flsZw95L+lgS6ERR0/ytAiAxb0HMKlHoF5Yp+cSk8Ci0hwUwGvr25FzW6r1M6jp5WQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13097},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.48.4"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.4_1633108994044_0.3123472370647242","host":"s3://npm-registry-packages"}},"0.49.0-39313":{"name":"@fluidframework/test-client-utils","version":"0.49.0-39313","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.49.0-39313","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"cd360b080744379015dbd3c86c2f7424338275e9","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.49.0-39313.tgz","fileCount":25,"integrity":"sha512-r+rUXkI2HK9pT356G8qXh+Onmcf/5ZO7oy0uCMvzlGgifctDTio+zWOMDUjv0ERKFiT3Mlw72ocJE4eEuNNJXw==","signatures":[{"sig":"MEQCIBomvTXN3skBepbUjoc3n+HGhlSYhuOCdpOoZ07nP9aFAiBf+evNSOsqwN7nAyToEw+/CKwkPQy2bG9vwGejIw6UWw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14571},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.49.0-39313.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"0.49.0-39313"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.49.0-39313_1633389872905_0.26418146401863596","host":"s3://npm-registry-packages"}},"0.48.5":{"name":"@fluidframework/test-client-utils","version":"0.48.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.48.5","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"17e9a862a9c93b6449e72696502649e0f3f81b25","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.48.5.tgz","fileCount":25,"integrity":"sha512-M3t4d4wOsdIL0WbrGQY9Uh8jeMpq+lVZI56/AatCLeyYtLu3EmZ+bqNspTCtU5qRVzb1sXKRXqBd1cqjMWt/Fw==","signatures":[{"sig":"MEUCIB/BgwEgkrrvelVmeDhXgJaVWKj9N0INLwYzRi3sBYioAiEAlZjmM4+awfrZLg4uloqLPn/ERDHOw9bQCk0Af5IrAnU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13097},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.48.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.48.5"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.48.5_1633471263431_0.2502934705515487","host":"s3://npm-registry-packages"}},"0.49.0":{"name":"@fluidframework/test-client-utils","version":"0.49.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.49.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"86cced1ac3b6d0ff6069ba9a2dafd5e855c53a32","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.49.0.tgz","fileCount":25,"integrity":"sha512-7QgSShx7hVHsoqLkh6pZ7GZmg1g7C6DVDwPiMvsvMWabToqJsJPSvl9SQRtbEu3qhM/+qGMjVyZfdxo51dN8DQ==","signatures":[{"sig":"MEUCID2xixIiBmOAV/QgZfDd/c14tg+A1bUPjWlLwyZ4KTHbAiEAkbWZBLUxE2PXPjtLg+gQCjrNYcjN2+zZtn9lY6qP3BU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14514},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.49.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.49.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.49.0_1633561429448_0.36254595646836596","host":"s3://npm-registry-packages"}},"0.49.1":{"name":"@fluidframework/test-client-utils","version":"0.49.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.49.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"34908e49f4da232eef4c4d56b161bbe86fa965f2","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.49.1.tgz","fileCount":25,"integrity":"sha512-n2LPOduO9CZHJzamDmlJocYdvOSsqIB9ZTHNCBzEn6Ol0JhZ6vW84NBZf+aE4GnLJyYyb3qOuTO/nNTTXR3qMg==","signatures":[{"sig":"MEQCIBLV2OgaxxFpGRmxobVinpMfJ32FszlDY8LBR1cAWM+FAiBH5oYN+GjPHacP7gtTc2hRNOdpi9lY4/d66kebg84UWg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14514},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.49.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.49.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.49.1_1633969604790_0.6209267675049439","host":"s3://npm-registry-packages"}},"0.49.2":{"name":"@fluidframework/test-client-utils","version":"0.49.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.49.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"7d6e5397d1a04df3ba091bfdd0f21b40b90eca10","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.49.2.tgz","fileCount":25,"integrity":"sha512-f3vFeAwtN6/RFc0dayhpZK5qhciInV1iYmjSKUTcOy9oj63aoeenDXJpT4FzirhLMcARPgb4SpRP72T/8nc4Ow==","signatures":[{"sig":"MEUCIDmqddAo/Z8Ptsx/SafIGpsXXCW7WoizxA/QrRnkan15AiEAgFa7zTqdYsHWwZ7cuYIApl8VDoLVBdh+9g7F0QHK9YA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14514},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.49.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.6","dependencies":{"@fluidframework/test-runtime-utils":"^0.49.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.49.2_1633991114328_0.5868748694793509","host":"s3://npm-registry-packages"}},"0.50.0-41365":{"name":"@fluidframework/test-client-utils","version":"0.50.0-41365","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.50.0-41365","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"933c3a476b4f571b851c7c353ebcdc0c6078ff77","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.50.0-41365.tgz","fileCount":34,"integrity":"sha512-D79L9JbdM39mVFtsbb84FKUpz7zSHXyHKZvFbtPoo3EOqAkZvAfiVZ9eMyN+mzOhFg0oaFgmvZW746//1XJh7w==","signatures":[{"sig":"MEYCIQDrPnQBnKK6dNLUdyl7oYAE5QMtGAipdS50m3IgQXCtbAIhAOjtvnkl7O+Ox7UDZf4r6VldP7FLQel6psZKaljogRS+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20842},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.50.0-41365.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.50.0-41365","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.50.0-41365_1634835837546_0.8550728041429427","host":"s3://npm-registry-packages"}},"0.50.0-41540":{"name":"@fluidframework/test-client-utils","version":"0.50.0-41540","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.50.0-41540","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5895166daa74cc0ec842909a8c27ac2db343e826","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.50.0-41540.tgz","fileCount":34,"integrity":"sha512-4Gvgiv4oBlORu5l0L/CREiBQabfbXYOgXaLDjBZSS+vOeIOHu35T0OaKgygrrvmG9rvuTO5a/eR5NofstJ3z4w==","signatures":[{"sig":"MEUCID7R987j9J+SHpDGH2ho+VqCykhgCQGao4Iz9FKyo7iJAiEA16jb8mxSypE5qntV52EmSfr61rIkRMIOPNBqgkNfa8M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20842},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.50.0-41540.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.50.0-41540","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.50.0-41540_1634918003367_0.1496490212345436","host":"s3://npm-registry-packages"}},"0.50.0":{"name":"@fluidframework/test-client-utils","version":"0.50.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.50.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"baa9e3a86f61b41d95fc36c90328c3c7b8004a21","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.50.0.tgz","fileCount":34,"integrity":"sha512-u/wsWPF940naz/NKeEzkbN1dfW8l/Se8urR1Sy/Gr7lM4CMb4hIJayA6ctDHvAQCbHMtkpMHdfmLRNsmK8MsfQ==","signatures":[{"sig":"MEUCIQDcuGd0KqoEQjFo6K1X3hCcA9QhA/5uPC4b+oE/eQsGpQIgUb03lAuO5eA8C7NjwL0FD8KbdMW1jUpFzFYkHoNpe/U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.50.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.50.0","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.50.0_1635180777596_0.9622252924265764","host":"s3://npm-registry-packages"}},"0.50.1":{"name":"@fluidframework/test-client-utils","version":"0.50.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.50.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d798c6788d8ee9ecfa7a84274c180adda45cf3b3","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.50.1.tgz","fileCount":34,"integrity":"sha512-4yZK+rpD5S8E7HWa7/MUR+cSaYVBBdMXgWY1f0z4yDeb0iuQwsMso8mie5g7m1XJWbM0MDTwQH4O/hsGm2PlTA==","signatures":[{"sig":"MEQCIAMgYT+ORg8Dtmwa+pz9Gz9bEswPSBdBEwF6dJgU/M59AiAHSm8nWNWaFeFZoUz6tqmN6QRFNsOFxrSaySFy656czg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.50.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.50.1","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.50.1_1635375419763_0.8028458393509501","host":"s3://npm-registry-packages"}},"0.51.0-43124":{"name":"@fluidframework/test-client-utils","version":"0.51.0-43124","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.51.0-43124","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"71423d76eda1658068c3463dcd68a0085fe96d70","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.51.0-43124.tgz","fileCount":34,"integrity":"sha512-ZUThL9u9n0NohPZVUurT2E5jszQkITAmRmSDHoJRES+jJaN2/k6faEdhjTt7gKXCjdSYGLmDkZQWXJzPwbh3Cg==","signatures":[{"sig":"MEYCIQCl0AGL1Tk7V3pj3hLoPguO1vYcoCkCBGG1JfEKLAGu8wIhAJSsACSfGFrm/llkWwSSIIrQs8iERM0h+pkP0l0R0Tjk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20842},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.51.0-43124.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.51.0-43124","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.51.0-43124_1636158510458_0.7530969098814548","host":"s3://npm-registry-packages"}},"0.51.0":{"name":"@fluidframework/test-client-utils","version":"0.51.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.51.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"70e0bde05dd544cf4012fc57b794d0aa64e79236","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.51.0.tgz","fileCount":34,"integrity":"sha512-aPU4PS10VjDuWmEykcFbNFu5XAlWSxV/KcU+PIefXAdAdu3CsbNOYaqwSiEXqqsmAksoxdFT+haZRy8h2zE5zQ==","signatures":[{"sig":"MEYCIQDBp9m9ukl2OoJNU8HvpQBJvlQuaWV0jLzPTJiNz6yXYwIhAI8EtCJNz+6rQxA32A80NoMT/fOlJWT2veI7glMg9nNS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.51.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.51.0","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.51.0_1636582939525_0.9554091155307292","host":"s3://npm-registry-packages"}},"0.50.2":{"name":"@fluidframework/test-client-utils","version":"0.50.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.50.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"20fdbda58b3f1dc2f0a2cd5e3d8b676fad0fc14c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.50.2.tgz","fileCount":34,"integrity":"sha512-2mTJJnUa4TuHxkzi8oZhKeERxyS5Y9mff3MKG/ZPTpYMhuwsi8i5RWqatyeL+pH+l3TPhnzWH/xDqRqplsCEFA==","signatures":[{"sig":"MEYCIQCLKS8T2p43Kh8Q0Jv6+U1wAlY5JLzNJTsOsEThGCg+9QIhAMXvgJHSmDqiW9nwfM7Nhzq1Ehvbzet6SwfuwXiFFx1V","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.50.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.50.2","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.50.2_1636751701480_0.6967903457213729","host":"s3://npm-registry-packages"}},"0.51.1":{"name":"@fluidframework/test-client-utils","version":"0.51.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.51.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e001ba57c3459b6edda3e2b418fdf7513846b9e7","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.51.1.tgz","fileCount":34,"integrity":"sha512-V5iw5RoSghhMXzZsyGfCufL2PuzPYWzfQ9DY9jigmCRgiOdS9VkxOCZAqXBW8cCyRhKSBa62estJCeVqljH4QA==","signatures":[{"sig":"MEYCIQC4tU1HDhcK2IfBFP9OOIm20dRbzlzQtRKDZtwql3FbDgIhAL5DD8hFd/xVTOIrrBnDRDA8J/Crjh5+K9lj9M/DV95+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.51.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.51.1","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.51.1_1636754627349_0.29091350203614685","host":"s3://npm-registry-packages"}},"0.50.3":{"name":"@fluidframework/test-client-utils","version":"0.50.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.50.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"443793646bf840bc87d91fca96b0277c7ced65ce","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.50.3.tgz","fileCount":34,"integrity":"sha512-BXzHJYv9VtuTy1/Sig1OHZJaKp2gPUC5sQnrr+Iu62lnyO83SBgWKs8ywVRDM3rgXHPLpalKxKJFJicewqr/QQ==","signatures":[{"sig":"MEUCIQD+K/x0baS2KtafqPQvhNWBE5h4NalwSJGRdL2w+zsC5QIgKOHBYBaxpVtLjmiQeEteVYFNECXNIbPmeJwNI7P3Yao=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlszACRA9TVsSAnZWagAAaGEP/0z6s2zIwPesjp7B7K0S\nBJPz94AVv1dfgTIqyNM8YbA2b70FV4huUq7vSGYi98zQCrreqXTvJEDxpovj\nh1KBNAhP5YbMipLsPyqovPNmep8Xgeeri0OhZKnFcLHLHAasGveJn9SJl71/\nwfnuPO4EYdkRzZZryB4Emw9WahyE61k3rvbiISGv19XL75Abo4VMX9NLDMm6\nfaiLjzUlayPeQ+EhPYFZpjD49taug4/Ie2UTFr3CPB+1Eb7S4HotR5XDlIle\nmz00AisG7DzuAeuvfna8eQw86uc4lFfKst3FttmOAmRt5eKzwpiWUU7z379s\nXkUm9NByuPVkw5+b6JMY0PlBFqxi59sObf1lYlIcRXHkx2dteL0IdOgVqoqw\nzISqyYx7SYJXek9DqIMew4QdZRUGynkCHZEXCeEb8TUlzpxblm89OwDGQRfP\njdTl5F/t5tXMefVPOPw+h5vg/PZ8toymwrdJqZj78rtyYvQbpH4OKejuU79Y\nfGK/kt+nYRHUBse7jsDky+FoMepuuDS8aq2HfDhkxxQVmFphfagBu7L/15nP\nqVTjG2604CNbqz9DP9eYUoPgMg8b5ZHfMl7v2z7KLvvFTfz5SaWPJUCSihwy\nY0Q/MP+q40t3X1Xn/o+IrnCbltzf3WdgvWVZ/3b0B9Wd+L05UbjmHRhHnbAX\np6TZ\r\n=CLc6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.50.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.50.3","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.50.3_1637272768130_0.779123368503563","host":"s3://npm-registry-packages"}},"0.51.2":{"name":"@fluidframework/test-client-utils","version":"0.51.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.51.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"dd1d424a75cb4dd2e0577458c5eca3c3ed69caf1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.51.2.tgz","fileCount":34,"integrity":"sha512-KcPo5KYOIenLM+coNsk/hd4np2IKtulJUvYe2d/c4Ye2uMyy6/KKaHt+khPuR+i1dcXNh1+sgIu18vrDSsVxhw==","signatures":[{"sig":"MEQCICv1MnlQ0CJSaEcWc/G74DpM0WhJUNmzpImS1ASPQJTgAiAF0dGTXFKx5yNEIAe92UZzfW520kEz5OpLLlul+sRwpQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhltjHCRA9TVsSAnZWagAAm2wP+gPM6N80Yq/O99QhLF5r\nvMFsKVMK0hILtMpdrsu6dql/ESVe0xojgPJth7RG2d2sEJvYK3djv/SxSoqL\nnRYYcRZgnJTiAPLUkxFEGxpURWtVJRCzWwzDuXfg2P2qNiHSbfsH0XtVbUpo\nfhAt6V7hRjczKEaKtbBmtFlFDst/4wUnF33ECYfH+9UT5l7hznNRVweJHh8A\ndHA8p2T5Y2CHHyYX1S2ulmCbp4IXYD86T7rNoZJGAsHpGerH0rt0vJ3INak1\nitEuzOKq8mK7J36jIbnGjLnqwD2vLjO/BImDZIL7GgIqTCPm04yM4qrMb1dw\ndV7DG+3CUi7jBTMkS9/unKNdAu4LyLMN7SvIbzv79VB4bi44ScU2S7j5kS2S\nrNgFJJfTGdRijwm+NkFu0MFFg/lYJPAETBSgP2oPaG4Q4ZqvMirnCA61QV/w\n++RgCZIR2y+/+5Kw3EDFRodcKSluEpm2QxOAY+3hQZUaE/bGLtTolEHaY256\nPy8GyXdKVFnZe6YuqjMO5K4tCPOrFWr8WVatTA0Fj9a7BwKT6yh7fzrleAGt\n0+yv/OjUISnm9q/jGQ+IKBudhJy79eEdB3yBwtoDgGWzxo+N305ZNrVAGUyc\n3H3nXaARwqO7nJKMHtUxuvIytZVqrY9x0+y/jGz0+d6TRJLKzSBR+sD7reyn\nhpHT\r\n=ug6K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.51.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.51.2","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.51.2_1637275847747_0.6067237507665137","host":"s3://npm-registry-packages"}},"0.52.0-44610":{"name":"@fluidframework/test-client-utils","version":"0.52.0-44610","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.52.0-44610","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a21cf0aeceb4456dba70920e0c1459b7f17f72eb","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.52.0-44610.tgz","fileCount":34,"integrity":"sha512-Xn7j/PAfVhtIQ8zcSCTmFLz6wNLX3V4Yyx4nJY/CcXR6vQsG60cuwVvIkbWfcljRdmpsXjZvrclJw0tUmH0fpw==","signatures":[{"sig":"MEUCICA4+hciyp5JmSHafU0jqk2U98QOk8ThzbN6NqWWgWnhAiEA1YoLPWyNquXd3YaeKrB7MxVS78b9BwlwHWzG1EDCWpk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmC1ECRA9TVsSAnZWagAAkp8P/3NgHeAvfI4mJZaKw3N1\nqRCY15m9DVwNvOSJyf2841WolYmYp6TcjOJHHzN/NeZYb48qZ97S1ysPdis4\nwIJm8k9RiyNvazzyYwFEmhp2C0E32yDAzRdwijSsGvkxgqTqbLpRRdFmxGuZ\nQEr9LVEKl50mSmQlKhMaMbhCeQsyLB06eXbQ/BvSvlx5z2MtGeXQAJ74x/V6\nqgJszLvHDdQvnC8X01Zpr8mcgeMHtOfIpfJl791rV0g6/KTYnnzUZzu+fi4s\nhOjHNG3qzWNOpbkDRUxo9k7GSwyJkizlr6k6yyO31aVMxDpLN/zLGQdwmFSr\nJA1LFm3P5NpzNEhlxwOih3dXO0AqhDrLIt79WE1XVNIJ7F2N6fUNJ2T8DomP\ndw9u/lXqOiaVaKZNK2QZY2mErh6CqwWn2Wv76ilU/NrXmRF/T6O32Tz5keci\nHuNShmRkQJhosGouLRZBoZwsYj7HOKk1DbpADh8Y3i6nJ6oZIANvq50EpYIK\nw3kbaRQ3z3/VV6DfRjlA9kvFT2NC2/v8kYwWwlbkhfAML+qzibzy5NI6rqF8\nacc6T19jW8PCjL2PAlIzWe/kgf6fai6Ke4CmEyAcXlj3IvY3KgBRo85ABKl7\n61/8Vn4frgUeVnr5aUI64P51yoHWkbbthQjcs+/PFQYP+nVl52oinxnkVBZd\nxhSy\r\n=cz/O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.52.0-44610.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.52.0-44610","@fluidframework/protocol-definitions":"^0.1026.0-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.52.0-44610_1637363012040_0.8039604722753566","host":"s3://npm-registry-packages"}},"0.52.0":{"name":"@fluidframework/test-client-utils","version":"0.52.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.52.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1e96cd921f50617ba1dcd233c9a338099b4729f7","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.52.0.tgz","fileCount":34,"integrity":"sha512-NSOr9nzfeYP8xD8u/DQz1LYt5GqpYt0eDb+mCVfyxgyODZ1WQp3TD2nWAeKxJph7RqC2+FgXDITXgMlrW0D5YA==","signatures":[{"sig":"MEYCIQD3Jy1cQu1eWTdI6MpHjxUq1G3Ib4SU7VhJkIiIH9f3YQIhAMbX/+aGyyguAavcvwpdB7m2v3cbbdGGNpABP50aGVoa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnBgpCRA9TVsSAnZWagAAHcoP/3P9qFSArezXbG/Z9gZP\n7mVmivHBj20LM8tSf5M1kRialZP9Q8uGiIf7O9LFwSjdvMd1Zg5q5liZQdDu\nzLAJAyT03bArylhnkDDTllnQgfyNuXoDHbcbxjaNKWMQM5uG3xvATjJ/W8m7\nE+n1Ep/UAJLhnd+2+5VPjOgjoLBtNYLwHlpbkParJKoMXiAwJKLMzns/duZR\nvs6FdGbBap+tyDfAA7M39ydzUnMq9ocZ6cNg6u0JoZzkAbiQxZ5m/xIRhFZf\n/IQfbnOW9431bNQzMxVl2i2z+2x61AGjvirY33bg+8WmeOxp0r7paJDIuOmp\nDYO/HXCcoDIW9U8IyHeuLKUPSKzNRqmTJb9ISndVHS/gvO3QjtUtoXoLdZl7\n0Xyq+tIuKz0xX6GqHn0WlNXT/btDFGKupyj7kEzQPvVv84R7FeKp7c3ZZFMf\nPN1UstN7aOKUyKIUw1+Yr0CSuJ94iounbJP4c9xySS/3GrZ6M/DgdTZzzr5c\n2BoCo7h9lsRojamw0UYragEY6JsAOPG9/jB+oN1ssuxy9CzDnpqp9PCa3dN9\nBkNGBPo/1g6zySZhMXzHAZlRBjaPOMMOWJ82BfVyCFiqrs32puWACLzP2IVo\nD2m4Tx6+ynNvysRknUcOPwP4qGKZ0Cofq1iX8h/3+k1EIt2IF1DSYN2hcsgK\n4cFP\r\n=H9Db\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.52.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.52.0","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.52.0_1637619753486_0.08009788616582991","host":"s3://npm-registry-packages"}},"0.51.3":{"name":"@fluidframework/test-client-utils","version":"0.51.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.51.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1dc95343024afe2d5205223568cbdfd0ea48ba09","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.51.3.tgz","fileCount":34,"integrity":"sha512-3x3vIJ/mJVyeXHpBveL85QKr8e5VO6Deb/LcGGM5TnG6nTueOHlLs94plM++fVct5YOobg/bt7I44ynRKCAtkw==","signatures":[{"sig":"MEYCIQC6TXh70/yTXvYvEY6di0rwEcV/5VTdg4sXj+3vRgpAZgIhAMivjj3iuT4tHxp/bWv3ppmZ/lz/GqV7A+ifgvOAcTAI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnU/OCRA9TVsSAnZWagAAVfsP/Rf6vrOMTbEbrpZoBjY2\nku5Xqn6wr2ZbY076LsE7ExdHvIP//rT2sXgXkKd7sZAxirLFTZxQbhoVEE3q\n1MNSq4hgwIffw6OukeYI4L34LuK2BAQ1A2wDGVBXqFetmwfnpaNxzXM4Eeve\nqt2ddSJKry6+y8Ul5TL+z0jXlqCxHqH+kZMdPheTQmFkbX0fbXEWdapYW2vG\nCZmxNog7hd+Z7HqH16Muqk0DV/ilTkr4DWFGQRdS/U8oCdOLGPPMR8Fjeiv9\nknn5asN3RmpYKwqIoxB2t1wGRx6FOL7OiXZzFlpu75bicIdKRce4H4aUXSbl\n4exYUMW8kbqc2yCV8U8GS/ciuNp33uis4ep4o7Qf9yAlppIB3Dm/pETTndsi\neSQFHzeDzb1sxDVMcyXuz3Fbk75vHFSR6CSGLOJnyGrLwD9PlKODSeBEdwBb\njX2+MT3RvQB25CRPdigUrsFHP6le1yzu2MmKdR4nkZXSadJrZNrdbLOpwgFE\nrRrdKe627OccyGzSZQ7gnHsAFaOGgYptUPQdmmyfPd1dfcTvH5BmL33bJ+pi\nYyMKWBORyH0yugYrBZM8crVpGXae/rA5Vr20DCG1o7eqI3uPnnJuDHZMy+uZ\nj4sU1/TFnagu8K0il26YPLAxmSmLv6HdP9dH6ucs40Jenp9BegTKuFOatASy\nU2vT\r\n=36kY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.51.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.51.3","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.51.3_1637699534626_0.251354682187942","host":"s3://npm-registry-packages"}},"0.52.1":{"name":"@fluidframework/test-client-utils","version":"0.52.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.52.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"57ceec90674bd4fed0b9185e34777cb55ea86ddf","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.52.1.tgz","fileCount":34,"integrity":"sha512-7fjkS1bRqieIGavFhG158JW6QJbY3bHV7E0matAg/fBP9BqPht7RSvgm+FNYgZZ/wNosg3+Zye1abPa2Q4c/Lg==","signatures":[{"sig":"MEQCIC7SEBuLT+ywyACGVz/3y/KCzdh10rQklyBT+DvyhoJQAiBgUePr7JicTa067kIqDgC/Iedxo22CBQ6Ni5BKZDPKng==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnWI7CRA9TVsSAnZWagAA2hYP/06gaaK8OWM5z0OxuHxU\nX9rj8KY/GB+qv0o3dZ0acpbUlfC7gbkpFJHsIea+NSVe/6EQiKlW9C7qDn2n\nC6wpp7gsz7wNcGCaladpgFdY4Syc25GfyoaWEkZRaCBHnr7MvT/pzgitSC+D\nraeZQ5FUxZByrM5BSuOh2gaYSFnQcgYBboWiswnazq8GU9iMv185SxOpt5Wa\nynwVC5i1n0b3AHbFvx+7AHMLgpsRBJrnKRLIMmfhYxdhcN0UDuLSwDY7of7w\nulxLYQH6Zf00+VWbhr+VBUIhcO8jOyILG/EjGdQXkj2cF/v2T4qlU6OZ1rWg\niROlZ9aCASnvHYEzkqEnPgpCujmjZKQPvlMQ2Hi63gVwS7S+lpLafndDGOTh\nBE3alI3gyiC543SIVAqdHB0zVKo+pGVq/ygD8O/bIia40qHyOa2eZ2EiIAho\noAeFFiYlwQCpw5NyOSFz9ZaSMHenn0d+QcSnNnc7pww9lyBu+vyW1NngMukW\nbnxnL2WnqzSA5Vm4DhiExfDTzaQ2DvJy6gAddDTNr962QCIAkmIjATd5scu2\nM+v034YaPvLJrj3CEc14HEUPqIZQ6rZp7avS8vpbqbo2Fdx8sW7zyg5vnKEn\nh6xLMB+OOY1xq7qFcjjoYrbW8sQfmD0vOBXN1uphim4T5nVdV41QcqUYzrah\n26I6\r\n=upMW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.52.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.52.1","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.52.1_1637704251102_0.6367719676933687","host":"s3://npm-registry-packages"}},"0.50.4":{"name":"@fluidframework/test-client-utils","version":"0.50.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.50.4","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"41e08dd5b6edefc495523d4e923056cb9472c190","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.50.4.tgz","fileCount":34,"integrity":"sha512-inXIbC+3C28OHq10p5CJ+LKvk0snan/Pi5FDUIikZKII2N6FNNeTtu06eng0rYnAmcAvUyRgyrW+TyLEe1lraQ==","signatures":[{"sig":"MEQCIGPbC23Q+N5U0f1nYjKzyt9+XieRlU4hmHQZZA1l003MAiATcUJ/Ec2TOJcY+dGkCAFMH6OtN4eFYf/cJzz6ELEF3g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnYSqCRA9TVsSAnZWagAAn0EP/ikgrmqQQ3aX6Nt2xrso\nESCWmZ0eiNbwF8kic7OYV1vMcFpvLtA7T69W7fITXjFUjI1gwIKoLZpH7Du/\nRKLFFUUWWd4CcmLplvlO2jshCpbuufCe9n8/RoTBJtYxwWItGbGPuBkOzTAB\niMSbIVI5bMdkQWkhSkpVpTXnCSTcZhxsy4W+KH0GYhqi0sxx+baRbSzrjM/6\nFsLPd9JiT83RKWqfK5Paf9VE5PMAjCqwzblOrKkhOxgUdLtdehZNmkILTiGB\n7PhVR9vui1QPQ83fEXOyr4qEg1g2XAyHhE9488fsZlI6+tn/FeH285/UCUtG\ndddCGlg7EH9R5mMG3t4LpclaL6qspsqq/NNFy9tixApma9oFQ39+EGrpxsUi\nzr5N5h/sO9jpHGoj49PmyrDWj9HpWHEBJDyAP5qxkYKlCMjn0sDuuru0SRXn\nVbhPg3RtCWIduA5T4KnSaFJ/FJiUBYNS8UNRK90qqf7HvNmwSVN3JuO9OHqr\njmiZh4N2jL5cojYafF6/ehm8ZGfSMUxwTD8kM9PpkboAvu8IFzlrfh6P5WQb\n+z783gJPAIf8Vt11VjL+Ls2ZvLVp1SvAbWSYHZe7J4gTiax0Sj8dgDxc1hft\noiYDAXzemgO51ot4E6A+/4GrD3ZLJtdVEF7UZbMHw6cZWgRffYcbKCqFJD+i\nbClr\r\n=q38y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.50.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.50.4","@fluidframework/protocol-definitions":"^0.1025.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^5.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.23.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.50.4_1637713065923_0.5037192740286807","host":"s3://npm-registry-packages"}},"0.53.0-46105":{"name":"@fluidframework/test-client-utils","version":"0.53.0-46105","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.53.0-46105","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ccd0b4e9b801a085bff322275b395451d0e5de68","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.53.0-46105.tgz","fileCount":34,"integrity":"sha512-0prAFSHgKZAcrDewJZ2Nl2r9FpQBY5Sb5gsKCBEDcI87VILRKH33n+WMUckooicbgpeJkCJvyAvZXzaMzvmE/A==","signatures":[{"sig":"MEUCIGUtRILYhBcm8y41saGNIUxx7fqx07xCkjkqzjMP3vXxAiEA74/b+CRrxLu84GHsSd24CqhBFRPywg4s8B+wUJMbGWs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsTtiCRA9TVsSAnZWagAAhZYP/Au/P2pvYVU3MafHp4V5\n4gZNh54bAjxoB3i19UMw52jXzu2/Ax4TLF2QhjhzMk+VOEhj5Yu17f3ZAmOC\nBaUfdI43Jd2Wvi2/YaHtGjvM43TsIDp18igbiOQ0uf8U+iz06T8r7Utx4Ekn\nEHq3FTjEVr8l9rniPdfjGPMbhiU/wJnoJCKARus/UUjpWOdB513iC9A6KiR1\nOhho6mKZrsvZowaSB+Md6feHAJwjkPjC7RUfS+y9AsleC7Zj6WsnA/Jlc9Bk\nXl0kkumS+WanJ9/ZoEsTgOBr6nJeU9UTcz7ZrYv5zt954zh+Jy5Ytxms6jus\nDLS3dCaJRKn6IspE5hpEWJdxA6lev4Qa18WFlPB6abIO0Y2pSC7SltSIWbfA\nBzrcQm/YVypgkkmBtBac2ye7CZXdrX+JWlG656/11dbBki77vwT8cGzTdJok\ncR3qugZ5d9RA6S1cIC+C6UVTq6mrsY7se6c+2acf4WedkyQc2qIyg+CnaG5y\nH4SyI6GkgVu7cscaXleewbGhBveUWPklN1FgjO9697Jn+DkEx8fZnlRYi6A5\nDsn75CrpMsCtpAG3jV0InNk5nj7/dfG6H9qVHwgy1DYgnVGk7ZEBbrzzll7e\nwgt4poD45L1qywgCLzJyD2BByUFlHVSTqRe9X2JjhBcaLxpE41+KIf14K+hW\noWA+\r\n=PIz4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.53.0-46105.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.53.0-46105","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.53.0-46105_1639005026456_0.6488009569272977","host":"s3://npm-registry-packages"}},"0.53.0":{"name":"@fluidframework/test-client-utils","version":"0.53.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.53.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"681f19e2dda95a1a3fb762366eb5c5aaf353895d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.53.0.tgz","fileCount":34,"integrity":"sha512-Oo8+FaOpOsjINfVj41Ba7j00durBoIzMXRytwcFv1FmRlNUSU5voF1xloXWAsowhLXvuoCGXgtixsYQImdFqPA==","signatures":[{"sig":"MEUCIDeuGOy1ZQE4FFKdmoXw/bvpZ1P6aLnsikbhfwL/Z7FSAiEAmrnUOsiAie4/UMK4PoNMwUdhscHlga0xufPSuA7KNtY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhs6TGCRA9TVsSAnZWagAA/yQP/0rcsqbU2uKoi+4p9xc2\nx1oByMg7UluVolbvX1h1sp+Jf0cbK2/pFtpMjhBN6zPr1LquW2qmXT2fCmrX\nAuvvD40A3htR5nvxHiLEv14l1qsdptHPZiIg7OJsV8S1ZaBlW7P8eTHRu6m0\nTOOLtN8/Du8/GbCsQtgtAZBjfMxm8XABQqDQL4YIvSH0w8mOxyySd++xnVuR\nNbdNI546SpJl3D4X8X2LpTYgeFzlczDbOQkMuW2qM4Q9kd8aArQB8wsof67B\n/VNDmV25J7fqy6ZCwDU+VXBgNK1AQTXf4aRbPFl74RhpKRMI4FG5EWT9yG7S\nu0qGw5RZRfmVfvbxhoop9HF6VfqvL7LHrqJJNPxBMbNjhEdhkwasXbbJAs01\nxBWEEwkYNok9bLcvYDLUvD94PG5jNntOxv5gPRnH0n/DWBcw487TWJzkpOWU\n4E0nIcnJHLI9Oey3Wu7HcvyERyVElq97+JJ6+6DYMCy/9nyBFjOeKM7njBx/\n+9tRbRxfbWZlSHW9vVX+ujaJ43e9N6n5lyeWhP5Hs7CCLXy0G2aaQIQhiuTD\neKbHb01gyIox+QqfJ/dWGFKay1dvzcb2KZzZayrLp5NhE2Fc2lzmW/nWow86\nB5ZxS+RKSpryrII892mjPESnDBpdK3Fp6wR1adck5/DZ+PaEERlQKv7JFcI3\nGGpT\r\n=TaQ2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.53.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"12.22.7","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.53.0","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.53.0_1639163078521_0.4781856715240067","host":"s3://npm-registry-packages"}},"0.54.0-47413":{"name":"@fluidframework/test-client-utils","version":"0.54.0-47413","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.54.0-47413","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4379e1bf3887f9e84153261a7bbef0afd03c26a1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.54.0-47413.tgz","fileCount":34,"integrity":"sha512-8tJxnVt6472DOQ2DEcJc3Ppb+PSr0Cn/yWvri9fC8G2OXP1EPnsbncV/xsxMNdbI7Fiqdsm8HOOmqttt6V5vgQ==","signatures":[{"sig":"MEQCIH56Cn/98mijEXVagdT8sXjka7wrboO03AdqC7VQyeLmAiBlLumOP+9tMpxAA5Snh/VI6ykqCcafCI8MuUlaWjoAhQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzK3pCRA9TVsSAnZWagAAd4UP/A6uGePRbwgys37ykMmr\nT/5xCgzVEAE+NYbu+fLFCBNLWl23L1IQHu/9foqjKVXPzqxZ2KxCUZVYWjOQ\nR7ugVU7OIRfl3svSXoWPcV+DBxNjph8uAf4pViHrBEvzMvUxUfAPxCl1UfLD\n+NTLsSXtararB7GY//+aSSpAo9JOoBDZ8bVG4UjsFlupwU4DTrQ5rwl7DZ4u\n7nQdHFNaIfiWkC5AZ+2D2xcH/rlS/sprDSuMXTZ6KKu84MkMll2NFQJDDljE\nHPNNxsf+3bk3rOIol3nEAl/ej0wKshQKlw83KUSWgNaq8wpYzpq7iJzxvMVJ\nPUJcGvR9F23njpd0VLLaV9252vXeFlF/okzAvYI+ErfsrO5jN+FlWrcShRyb\nQOu1PTKJB+yVMvEOVG2GPcuKHfPZ/6ANpFVoAzzkHcGVhyqWQwTWYKsKyvx6\nDCUQmzfxtJRojWyzYx3DUbiCYjd69DfYHRNYaPhWbAwVRWHsSM3x2iwzT6y1\nKLiLCeVYL1WjYuGajzVic7ROUSxb1TISHGp7tLWaprWzCbYUypB8aKkE34CN\nOhlq5DB9/K6QCIKw7LsnOc/NX/U2m3K3hGIGbUrJGSnmn5LMhve73/4T/3du\nnhRMf7BawxdceK1QtI2KLqb2jq/BrdgGsOn5kKnLBqvm1hawYAbJQTK0+rQI\nzzkk\r\n=gExQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.54.0-47413.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.54.0-47413","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.54.0-47413_1640803817489_0.5547364473841017","host":"s3://npm-registry-packages"}},"0.54.0":{"name":"@fluidframework/test-client-utils","version":"0.54.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.54.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"420794b5d7b04e2c999a71a71cec8bffff2923ba","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.54.0.tgz","fileCount":34,"integrity":"sha512-XQInUxr6H4ceKYMvo8tQJAhM3/pDreHXZp2+ZlLzWUWzXS04IPnnwZ6wFBJ4L56a7G3iEfVe1A/EBLFiW1kLCw==","signatures":[{"sig":"MEUCIQCBq8owEL2gnUapkik3nT9K9OWw7+mtZPuEB25PDZSliwIgCz0pBo2gEgS/E5hasfxEjdwyYlNI+SOXSn4ShrcjX7c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh03ssCRA9TVsSAnZWagAAv3MP/3qeI3/LTaxmaetaVaMq\n9qyo4cbuX0qBOA3nGWeHIxxlwyAw/YP1zMcuwOIgDEjsJA6qEk0kCWzhUjWV\nAvfys7K3H9URnA5MZt4+P9IoREpQ2zUA9fb5VFkPDz4JoRFhzApXHWBhIw98\na4SgzaH33nHfhilpayrJPCNOcb25DDYpHHgTFJon8inELqm5EuoOPWoKW86/\nspK9zysnv8UK1K7F8uz0FYiChuCGHwM7nEASbCgfo57AlK2v9gNmH2LrlbLd\nadJObt4Ic8U3e6l7Ec1tHr/Fh/qjWEvKnFj1Jf4NH+egeYo08H2rvRj3gg4T\nvxdKdQxdXopzjk1TImiykVc4TxyX5fcM5ef04aV/zjdUf1Ctv7OMHzZ1/FfF\nNFgxz0r/svJKd4mz4MaviFU3eDbYTKyTx0Az6Ci+ZppEkwGknGuGeDhX+Fua\nL05TC7KjjyfBz5sCT+LuUwAmMVm0pkMl0hw+2WAzumX7Gi1b9SHrfl5Ne1Cr\nIb9tRaBVTKG7YVh0fy2uPGVTKekDQZkOIz3z5LLaNv/9SfGTA4VYsCX3XhX1\nEsCqIiqOzXUHDm0Zw9uobxZd4FWyckeHcpC1USX3W3zEadXuPxgEa+TBv9fj\nvJs9iYAOl71G9eKLDgoc8jOseCr9CH2Zba0ZvIKNHmCh6hGo+R9b7Fd6AgpA\n1GNz\r\n=Tvsf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.54.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.54.0","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.54.0_1641249580557_0.8019415255149589","host":"s3://npm-registry-packages"}},"0.54.1":{"name":"@fluidframework/test-client-utils","version":"0.54.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.54.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b62119710d4ceec82c7f8e62aef4bf815fde70bd","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.54.1.tgz","fileCount":34,"integrity":"sha512-AmmRUp1v5HHUELLyAmDhfJoZ+Iu1t+qHHsC+kHiEYk2WSwEiUc5vqAzUltcyF403IzWXd1pPgg0fhxCi/lNR9w==","signatures":[{"sig":"MEQCIDfmWYXi7VF1tTz2x2K3czOx9CqVQWFs+e/HTSGga7wTAiBjumAIlOMZtqGD81vZ9OsoKKK/5oOlhd/D6HdIO0lZ0A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1hZ7CRA9TVsSAnZWagAAa0UQAIj162XuSKgi/vcnW0QX\nCFoySCma+m8FUsOYIKlDF0ZZjxNqqkonxAb9cKGIP9Vxp1YSrRq6pGJXc8Fr\nA4pjZq7ngkARe1iY+0Dl0gssJBePnieqU0S/YF8+U+y3H7ARno3+n8Z866ZO\nDEvaEfr2cAKHrUS1rRcBSp4Ufgq5MFSBoEEFj7rL4+WkQrnqAqZv5owE56zI\nET884PZadklmfHa1I17mL92Q1uCcXbup03RT6uEOCHQDza5BcuPLnMT8KHkX\nIrsno4FNTfnnUDgwbftjvhoh9gaOLrzqMunjjbLhiij0uE/hcsbL1kLXNkeC\ns7SFWrJXtHXTml4mSelc+8ls8NiQturp8Sc6NkpL2tap+KgxSzF+dUmFIEs2\nC2BwYidK2DsqPQbG/pi7AU7G3NiFrWAAlx+XvhPV0HL/WzKIf4OWkyXZ0b2I\ndyFxn3GLd1xsYAegTY8LUd00pWMWfQenyh1zPcGv8638qtYeg3LCtqn/7Ngq\n60T1aLr3/Afsv4gAlOjgB5oowDyFetxDLNbfV5BWyF654H+0taC5rj9n7Qw6\nNSwWwgpDh6VyPDRtCn1icj92Z6ktvbTkI690253gyyXA6mfYb8PVaEGJVl0O\n3j7OnrJzoYffyh29dLwqQo3LUVcpeplSBFRkTTNj79M9p8SO0hBWOyey/O+a\nW+q1\r\n=CoMt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.54.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.54.1","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.54.1_1641420411170_0.5665606061558126","host":"s3://npm-registry-packages"}},"0.54.2":{"name":"@fluidframework/test-client-utils","version":"0.54.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.54.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ad3a4ae4ad4c4a99425e03a3dbb3a050d8ed0bfe","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.54.2.tgz","fileCount":34,"integrity":"sha512-cjx4puFN/QRKVskGmUH6h5uB57uuXxMnXR40EEHVE4PB5H/SUkPW1cchSh6FNvENz/SGXM1EdGmsi1GSRbMEng==","signatures":[{"sig":"MEUCIFu8DlD2UJbdgZFCHSDyuHtIBSOXQzKlUO8HkYqGpNOpAiEA2D3qIuyBKmm+znwePHH/l6xw5QqIqdUjZJjyA2d+wr0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3e5sCRA9TVsSAnZWagAAkC0QAINDVde4pD/t43jx9qsy\nWS40XpR/IsP/UTDhXnBoQW8TggObDT+a07Opd4heKJ81yuvGSm7wK+W73QZr\n14ZO3lTmWs7JNcyoxDnTbey5+OkBJqKv2habyiYA0s7gun/SMzeHZtOmRC8d\nArYJ+RX/mZl6QXr/24w0l28rbIq30BfBzIELMK5hggYcENkdajHhDwBQ9qR9\n/zWblWwXpR5XEWDAUhEyRPImPRYDdQUyPyI8p5LvF0h+5VTjhct1x+8KWA68\nETIg6xIjqkL+46pv85uiGsxoym4z/VXF87zc434S/eVMjIQ46aOVMWIiuW8d\nAluFfBPIzVYfGO3zHlML5M0o9dMOMDvXFTppmSY3wwsYx/FsbLBSlaXq8P9n\nHKBM4XHGNDetye9R4AS35yc76+XowwSGkS5xHy3dinm9tg3I3qgRfG62YNl+\nkKcTI+Lh7LMi9IzRDpiEAl/CbwZqC7RXoqoYNtGMhfK9TJ/HFO1Mal64NLRz\ngQkWd6t+xgJxznDl2VoqWBEieYZxp3LTzki7l9wsHcTxhkRtAs5r9+MVMu9g\nHZg9TZcoAGfWcbX2sLHxViYCQtT1XeUGBWMxf/sMgIL3R++DZz6aTGCP3ykA\nD4shjGK21S5AB9AcwKhaZV07XIKmg4OjKWOt8EUtYqbwiUjRttddEAA/5hzj\nXh0D\r\n=gVYG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.54.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.54.2","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.54.2_1641934443992_0.7408703929456248","host":"s3://npm-registry-packages"}},"0.55.0-48551":{"name":"@fluidframework/test-client-utils","version":"0.55.0-48551","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.55.0-48551","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8065177df8e67525fc14796f9a5e883971d6a227","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.55.0-48551.tgz","fileCount":34,"integrity":"sha512-LwPynxDZSkC7cjhURySoltfseE9Hng68q4KgMjhPMYsx9M5h/u4fYGD7VhW5+pR5WJnd8JkTG5frnjtlIIggwQ==","signatures":[{"sig":"MEQCICu7I2ep2YalsdJeyNPacYzeFqs3WA6sMEJ54PrVt4ocAiBrapJwie35CY5pqW/AUR/qsQJmvlxpx+XbRnEXATPQNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4et2CRA9TVsSAnZWagAAI50P/2+rgUwXSq5F2G/Cv1W1\nOXyYQ/WnaNyHV7zcf8jS/xTPfYrM+2a0w1Q0a7yRNS4iv7njH+7FCEGEtYKC\nobBgYQe3fnUhn1jDU3enHzmDM2rC3kLfG8ynKU0B/ecggGTnZlpehdjhk8hn\n/lDu3GSuHdfenOONK7p3imdjeN3lHrKl4Ij6kJBsuiuZEySAw1qzEAiKO+8C\n0IRxY1GepZlT3i6/SSiViTMcnmzhDtGoK6uffawyWpAwfzXGk7LRPFFEuCgd\nRvk6isA3uvjcI7ye/JBgHc5v2CZS4ZmwKXPUbyX2zvf1a3tOQJqAOwe96j9P\n98PBvImmBgL5Q+/SunL0NUiXNNr10/kVCoWcJQBiWUzNaINQAwf2O+YiHoWv\nmrzKb+x2f4zT+gzmcrQT+rtOmKw+M5Ke18TCYx/XgoVq9tu/hd4XJIfEUDtD\nVRpQeqK8mjdRwh+u2M/fNCXS6S+HBBfST8Dia/g/Q1YBwpOmf6l2f3Cu/3cM\nP+oWR2kzkW/9IGdJSfyJTXI+Rd9vatWZ2szvvEUN2pdgra08qgzsF9l+/7x3\n9/q/pYe+05HbcgpoYeRik9KbiqS4C4uojc4Ek3cKqjD5LmYKdWlhFJw2mqok\npQPOUwjkq0ynFccEZCfD8EDxQ9ZN0sE5aETor3WWGLP/IzwGBNXLWctQYRhz\nBVTI\r\n=BFjH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.55.0-48551.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.55.0-48551","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0-0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.55.0-48551_1642195830573_0.25450522049282553","host":"s3://npm-registry-packages"}},"0.55.0":{"name":"@fluidframework/test-client-utils","version":"0.55.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.55.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0e03a80ea0e7306e8bcb62005dcbb419885c9ff7","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.55.0.tgz","fileCount":34,"integrity":"sha512-JJ927bU3oR/tHC1t55cQ2f8Y4Dj8Y3HzzaY/wq+gKscS7t80xG8dYtLD2NSLCURYu4Djg1eBdPC+rkxZoBb4hA==","signatures":[{"sig":"MEQCICH5/VMYtR7xqAsb4Co66uAQ2kvkGD7/GXbDVLDcrCXfAiBiI7Amkr6d93jdbz9dn131KSTvusZLLGecoesOaq3TGg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh51FNCRA9TVsSAnZWagAA2vYP/0a9vXb6gnu243D/ReJz\nmoGLzN548Ns5BhSz5pQ+ErDapON5z4ETEc5HCmVaKTxnz9KJAwEcPnmqcAmN\nUefFsSCh/LUTj7wbuwtm6fSy0mKYPBLjqAj4EUPt2RT9IZIJ+0PwAVk7+JIP\n7MBnkLlEE8/M1niLrVxHjIEe0ZKu50a60ccQWIGMaAQA4s9nH2/oPvt6Is2i\neSKdE8eorvKjxswVwnqXPb/tp5vM5G52InDFi22UzGjUhw4X3V74T4QU0u1M\nLXtLERSFLBSFHwLQAUbts447S4IQ/IlhboZalyoY9yM8KkeIASAkWHdehQZu\n+WxqiT4gQQPiT0lO2JwIpIFqPAenwstvbX1/FjG/EA8IKupUS76f/Wkc4BSP\niRdHsHyW/QZjv+KA6VzZk/c6IHcAjky3zW/KZr4YgP0lzkKjbmaqlqrSvLZD\nxcugPZuyPK0pM8OOoDqDsL64UjwQhvv64hGL4dq2oy3CNOXmUxjSUV4ZqzjV\nosxpaHyVjIrL71zAX3eAFAJHRb85Y+l+Z5jhMnSjcpbpOoK055A73nWG/9fo\nllSKOlum7+8KAJKS5vLF3qtOFiQ7Vxpq0E+nIESPDb+nOaEpFNYhMljrwqUz\nSmbDOqU52Hm+OoaG5s9OswTD43tDO+ILRQfKgX2Z+CK1ovfQZECQFdzPeEPO\n3dZa\r\n=kMSG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.55.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.55.0","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.55.0_1642549581377_0.3053614439914125","host":"s3://npm-registry-packages"}},"0.55.1":{"name":"@fluidframework/test-client-utils","version":"0.55.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.55.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a0a7e938338e6e6fa0cae2327fc4985796a1b0db","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.55.1.tgz","fileCount":34,"integrity":"sha512-T4I2Wmo05n8sPpcHyN2HgwegSnHJ753jF02DJ5PjuK3oecD6U2SZDH3nq/QskvavTpKoIsA9VxEwm+Tzw5Vg4A==","signatures":[{"sig":"MEQCIEDVZtNtJUP6ishUZsBPKbbzBvcfl9o7L+PGvpjd/P/uAiAHWUROnAVAzCXP6ML4hAgEzdBiDZNnnXKZ2WYRiTHeyA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9D8bCRA9TVsSAnZWagAAZUgP/3fnWw7cF0ecDL3iiY6T\n4kehv5VAKmnc205K8/l7jzuKUGV7U3uZhefHHwR2PUJo+GliyIXexnAeoBAB\nWAnuwW1Z33K7dVm9J8p5wQzXvgiFOqjOn0g3KUgEPcVtNetW7BsAIjB0HeHe\nWsX8jDWPwFwLEUSIO2ph4kqtRZQGkJE3eGgZM/0AMHEQahkrzq94KYL/072U\nDFpBuKadRGNOEXSWQA8UKYEv9LfmuEbjZsOJSt7Je1KBsP8n7oommuLpW1Re\nCYp0r0kghRw2WPJJE03owrHrTK5EStNTb5KajdXx2t/5LRzbPHdYtrXEvEiV\nauJfVXLpZ4T478w8AENB7CmrPZRgG2UXLCRmjTQ6xrqKoIZ9GCVmIjguegI2\nEerTzTSmrYNA8A3nDNydHIffDPiJI0HqnY2qz8GEuIHT8rCC9ZMdLewOh18R\nwLU3+FffKDLyxFEvCGv2IQnIR+jZ3HE63mCvKQGg6y7R24KwH4PGhuOD2Ohr\nXOH6+T2CRsi8C7K4yezsjI+uZYxURO8cTSQNE83CmuPhYfyMYc+nKc0LK223\nfo18PlnmazlKNqhjr2vLef6nN0j9a1FPumDp7WpHhvjer5BhP7qbQFK0rV8c\n3bq8IqbDvJydBeNyH5N/6l65SstjSSymsFkmbzOfGBoW8I/5FQHuBehJA42n\nJWWh\r\n=B01f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.55.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.55.1","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.55.1_1643396891486_0.4235064369283805","host":"s3://npm-registry-packages"}},"0.56.0-49831":{"name":"@fluidframework/test-client-utils","version":"0.56.0-49831","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.0-49831","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"da39c414c54b90281a909fc147bdec5e95180df8","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.0-49831.tgz","fileCount":34,"integrity":"sha512-3Uqk2aFi5KDoXFUBoeVq3EjpYW1aASyq8a0Db5jixi58ddY6PcqKRsZAPVlAAm7kR6pBpDOEtub1V76BSXsWpQ==","signatures":[{"sig":"MEYCIQCaT4eJkVhP/YMOdXnMXsq1FT/OMoUof/LgM9iCKsMpwwIhANlagVhcQibIAzll9AsXuDBCImumoFSa+6I8I5CFH66V","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9FOMCRA9TVsSAnZWagAAsxcP/jPJ3VQR+zUnVlQ5VRPZ\nECGEb6p0mKJmYeL+P/NyLq+03+dFwHKaqYXG0V7ccJ0uNOss6XEwkcWGfmhc\nCdHNQl06VIBXpk/5aET29W8h0aFIqbGqeEuOLDQyErN9JNNEkVG+VX+jrX8u\n1G412Utj+Z3fo2C29798MVyFD0kmasLJsFvyRN5o/UP6UaawmOK4coA17h62\nwzzlbGvaBKBQvo2fhvnfCN40PVLr01UtR1TExJA8UKo/m38sBIL5jYyKGwj1\npKOzA1WAJSZsD8McbyPmRSymK4T7JFU0JFnTR4cTcwHRD6cAqO8YTfKwFUq3\n2zZjlcBWvH7Icg3YATxzI3qLQhYXKjWF2bBvHSySnjdmWwNW+XMBBiHd+E1Z\n+fPbWQ2DUzdE6M40lf5zXkBKlcKRNKFua/O8XjNXKA/L594BeSmBr+RW1zPE\nbf0g00qBUhFRKpYABHnhw+PVB6GivyAa3RGOEWHlNYVxhAzcqztH4icr4y/3\nZyx8Npm/VBcUIZngehuq2ktXF83j8SMn6vxZF4q42ecdos/uQ8Us7hNMXLqs\nwXQVZjpG8sk8fwHj+K7Kgbc5MfX076Ec93ndxb+nt4AeOAAEz82aG9WHvLYV\nrU/QXH20QBd85/PNxFHJR2tzyz4UaH9BQbadi5ranaflV0/szOOx1kJcOYzO\n524C\r\n=pk8e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.0-49831.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.56.0-49831","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.0-49831_1643402123862_0.3645485961808541","host":"s3://npm-registry-packages"}},"0.56.0":{"name":"@fluidframework/test-client-utils","version":"0.56.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a69cd3cf8e68614f0660017e29494a4598766e7f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.0.tgz","fileCount":34,"integrity":"sha512-jWeBYdQqy5ojhg4CDMW0Vv1PrWhg5KK0fD/lOSJreLvLDD7yeoCyOZXvZdGSI5dDri6UadooTJl50PVBQMDgsw==","signatures":[{"sig":"MEYCIQCikZbjc5nyWZ/kqI15Gek3Our/2ugwMcrxPa4u9YExywIhAPsOKSZB012O45S7IdrUcM1WM/CeG3qa/9rMY0fATdWo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9IuyCRA9TVsSAnZWagAAFjkQAJZCxbQ752Yz82sU+E4d\nBwDoNwpscQzkp6FhyQBaKh2eN8t7E9RAcIOriQrEvIuN5BxLdIg0QvnTfbfA\nsmalqAAK/mwUg2mSRt0mIULjVy0aYP35X/s+UjsyQiLh0k/z/XZe4lkpspq9\nazWJ6XffAIQRA1zJkTLe/k7Ty6nD8Ij6N6nxug51OvGeepIVWAXEO0XWZoxZ\nq378HZYgNVZ+5snLpVN5ipmp5rlPE3lDbvGSB368xJS04ium3W1qFT/mEn+C\nmHbBH9F0lhowwquoB8CUlDPJ1m6npE8i65Hm2anjia0UD4607lsFMDocYcvR\nthye9qARjePoPE5g6ThjRIrw7CGP6CRDcxoE/9Jc153vAW4F8hsxI0k4Rorq\n95rQkF0l8KcMD9VwNwQ49SzAbna3j6vYoPUmMNqVS5xrGMQ1Q2FFlf3DZRmh\n8buMHgtX0O8GIucjFzwkiu5npYR8OXdFTb+ea9ZWtWouqhmss9bNgiDqzS7M\nmjp+7tPzIPYEhyc9fkVFiwsb8EUYCjqqT3ZIfuXPq9hR4ESvXKK0Evbu/yk3\nT0hTc+8CNKd6Asu5uHWGklx/CNsRc2Pfpnci4d8EqN3qnmt19S4UJFSW6dSP\nRcx19ByAHm0AfYo7NPpXksIIAk5Kn24ati6w2S/hrgHkDCPLGR2Mjz1fBl7H\nfhvt\r\n=JWK0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.15","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.0","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.0_1643416498763_0.43748353604402546","host":"s3://npm-registry-packages"}},"0.54.3":{"name":"@fluidframework/test-client-utils","version":"0.54.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.54.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f47cf00254b0b3dedba18cb0b121747940f4b48c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.54.3.tgz","fileCount":34,"integrity":"sha512-Hp4ok5bFZ9QXJ1wfnPvN/AgvX9uwtbT/5tp4O2imRDuIIirOOfMWD2KhlivhhfKX8EBviwhgqr7CnZet3uCDqA==","signatures":[{"sig":"MEYCIQDOBzffrK+eT342A+Hxw146bt804KJLr2sn6q/nfMCI5AIhAJ5RGLuwL6ut+Q/v8RzpFkBNeAGSS2gyPD5r/uJERTJt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+zyuCRA9TVsSAnZWagAAbWwQAJqTNmjUd68wwJZOL81Q\ndLZFi/WZNA0k74PyGhDGzZxpPnSNEgNEsz7KEL8YFlhj2g3Yt2alUZWxE+Dj\nAHqFrlFMNDC++tkdVz+5G+ubrWS5jxxRP13v7lPxEAvp+LS90S205DR6IMoo\nDHHiAyTQnBqPtsxXX4IOxJAZIirnz8MkH0IMDTEHV7n5pGvpk3M8G5PpEFAZ\naRMcCocUin/73SvFo+8boHmn+z3ltwktODmvaR8RZANA9F0tzKfrjU1VvFxW\nnPuxgrlOljbJAnh2Ys1Imq6VcW/SywIFhgYvS1N8e7B4OrTNFOLs/sLIkO4R\nkAnN0il+4zeGuzM9NXZb5NcO90QJAsiXNlkLupL9OSQs4zk5idk1EfM587lM\n9GKkAE87VIjPIVMtAO/nyQA6S2VS3f/DTDQJWmw4QSVLJZw4lpZQ6X4AkLKv\nRqtijf48AGAKBHd1CCdd8B3byB3z+KGfEmDq1X/KcYj738dN22wNGkIK3P0E\n2fEHBOhLGdHjt7U3RJUJp1e4W8F4CrPzqGT0SW2LiosJkIzd9s83naxOyKIv\nTzyaxIRe28+5AKDBYPh888w+7CNoKjQHsM9vSQttnhE/uIoUaS45j1ygXQKT\ndja0MkIPRpTRPR023IQFbP8w5/kAyTqBdmNQPxduZiwBXCGV91bDluvrpjQd\nlG2Y\r\n=uBAC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.54.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.54.3","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~7.18.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.22.0","eslint-plugin-import":"~2.22.1","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~26.0.1","@microsoft/api-extractor":"^7.16.1","@typescript-eslint/parser":"~4.14.0","eslint-plugin-prefer-arrow":"~1.2.2","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~4.14.0","@fluidframework/eslint-config-fluid":"^0.24.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.54.3_1643855022558_0.6903250726787677","host":"s3://npm-registry-packages"}},"0.56.1":{"name":"@fluidframework/test-client-utils","version":"0.56.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"7fa2206bb07edbe5ca9ec0fd52163124f4c31751","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.1.tgz","fileCount":34,"integrity":"sha512-roQqx8xuPnnOLVtP4YQB+aRCEinPB6xDgGGPeZxer0lKKScxtxB4nQxPjufjkoEfkKwqwHzjfsBQqf9dw90UOQ==","signatures":[{"sig":"MEUCIQCTc8aVRChLDuALbPaldZi8x5BRbkZJz4laopYQW5617AIgJfgjm4IpqBBvYIRzG1uvCbNYPDqcvqXoNsmxdlB6n9M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+z+uCRA9TVsSAnZWagAA4woQAJEOz4h70R3LGLCMmxMe\nNKFmLYGL1q1sPWdSA9sX28u40KHDLC0L5YSI7AmsDoESA2eBeSXA7SvXXL/4\n2VUBCmtcn4KD9doizc54j2E55Uruzb7gPoKo3gGXZka1WDxhl5heBoInFllv\n18pBP/Xf5DwFbvrNNfMBU+dMQnOg14e4ISqZ15YQPu5VzPk93Pj6HaQu/UXq\nQS0PHDgRha7MatvtNpTuVWC9GJNUbdQ8WpvTQ3sFEDKKppnK0nwAvZpBtnHG\n4lkJJ5W9CiaxgTriHn1W/YVgRGfzZutkJENH7gEJj07f7DKahXte5MS8qf9o\nRd9tdyewP6mwn/4X/frzFf8yMHivqPEPPQiR7wsi6ksVryFXrlW1R9EPzR6U\nuDoPyNvd3XLsj8yiFF2TgOleImkbCmVuGw1SBCBL0MAiDe1BxV8ZrtYOqfxh\nxs/gYDbr4atuEv4ny5GtqVgFpdJqmM6iWmK+HxutRNB1d75xnwtu13GPMV8a\nYokoPzh35R2mc24JJliSIQimBRyueXnl2ypN4tu6qrwsXawqnllQXy+JIvZF\nXI9iXbWNTBVH78J1ZkVRKnYDQ1zemN1cln8Psyxr254xXlYfTwuQ9KOL7KrI\nHU3lHFCZRk1Es8QZpa1GJ21xNbOCZS/Lm6bbR42tR+mV9jJXXqRg2+zq+zh8\nmXra\r\n=LWNc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.1","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.1_1643855790732_0.035867635759406324","host":"s3://npm-registry-packages"}},"0.55.2":{"name":"@fluidframework/test-client-utils","version":"0.55.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.55.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"},{"name":"danroney","email":"daroney@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"953a75bab784876e2ccc698c4e930c67a78f0b47","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.55.2.tgz","fileCount":34,"integrity":"sha512-UscKHUUah/0OS3y5ubjpzOlk6DXvR1rLlbEHaTyigX7Hs3sjaQZPfpuyB0uV31o/Q+4ChUZIVJFNALAfJ+8aWQ==","signatures":[{"sig":"MEUCIQCwNU8Oj7CRMQ0uCwddVfBvbTTda3AkSr4RUK0YaD6EcgIgZzpQ8/2xla6NT3qf5gLWT3A9k+q2064ZXPPDEBMVOk4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+z/1CRA9TVsSAnZWagAAPUgP/1dD06HsEuQWJi9TWAwt\nTMz9gacWN5eYmQtLAEhs1NbQUOT86V9bdKSkAZDRaZ/pdUPo1+M5u1XCo5dI\nRBsLgePv5F91JSkFXvqemvPnJMpmeUcvH8Aw6tI5M2r6JuCtz5AP8Z2hkwg7\nc5eAEwaXRsKg3EQ6cNo/XJYvuUrVAl7MesxyCFU2z08DJFii2r4s1rRYm2t4\nY7OLxMO/wN27Po49KzWNx+F46oWBqJjrnYChoDcDkeZx1iiUIUdglAFEBuws\n24ZIWq/Hmt3j+II15h85W73chrZyWtBte+el9Of9EBWVj+VIhGhZYnSj+c+e\n9OxeuecDcyaOEh4dJNbADrNKgQhXVvam6Ggqd2yRFij7db+CfrSVklD1fZNn\n80B5i2XwpXN4a3zFqU74paSYKnp/B/ZsMTXUbTuYxY2CbulXkcjrlnPCTywS\nNqSWEGVpJ18FoD/ksyEB6XnWRFliRXiCgCDO0qIL4NjBIJvzcAiaL6ZENNLJ\nDgGh0wHf7gdyHpAbHDePeWajFm2bWKUDCx+uCou7uGf3SysBDksg/lEhX/AA\n1Pfv66zqxvxEDG+3R+MLWA38b2ZsaUjmQ7I7sVROKr2A9nNnSC1CB0wTvEAW\nHV1VH7HhDJd6szKB3jvsSffKXGZpcVqrAHLDVfz7lWMgjLtNcSmIxjyJq7yi\nrJTP\r\n=q53w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.55.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.55.2","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.55.2_1643855861366_0.687810634894219","host":"s3://npm-registry-packages"}},"0.56.2":{"name":"@fluidframework/test-client-utils","version":"0.56.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ca3b4cd7083a7aa59d2215468daa38968caf5f66","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.2.tgz","fileCount":34,"integrity":"sha512-zliaAjQEkKRmmS0svf+OOUv8CUFHM2OkGpEUxmWXMRyLIYgNAvoeCZ0eTr2KAuTazPZDtf6Y0ivG2f8RdaRRRA==","signatures":[{"sig":"MEQCIFoNyLuCNDPUt6Lrg9eHsW8BP5nZZAk5zepDQS/XCjcvAiBuNC9gSVCZgUy/WSRY724UHAlx2+VO/kQLeTjufYcH7A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBFW5CRA9TVsSAnZWagAA66YP/1DkWkG2mba/G8RHDD9S\n39EfhYt3sgKgEvyOXjmZb9mhImpH2pQto5tEoZGna42hDVZW2o+QP2vcg86h\nqQqCAlfLk3MG+VPU6brKU1uO3S0ckvA0Oe9eUIwOkS3M4vNSPB9UA0nx4Qgo\njFp1roTEpZtlDDyEjQ86Hla7yNr+HsN5A0A0KIges0WbTXRxmu91acZFwcje\nAZvV3GSpQg5VtQQIfu/BSY3P5UtMTQ3mX5GSecbHPDUaYFVBh8qFsOIgW/9B\nlWPZeA/WJR6csgBX8gCfjD1IcGp6dXmNde7mN+E+zWzKbnHbQaUiJdoVGfEP\n2CvV5r6DJjAohyqbDqCqTY/lRPDmG5EFuB2I9Paj6w98NJcTokj1kG7yO8dw\nHDroiK36K+TFaPLFniidLKwI4WAbOKNVNvoHOUSYqL64n3OVH0V7RBjkGLKI\n5fGUmjJOhaZGA5qszvZ1YDnYe8qxYmV1NpMKV1eZsJosbFbcIBhRz1OquWHF\nXMLUMZMex1Emv395wf5blDH26G4qQ9kXUSlHnzuRZgR2wZo1pW8diIPvm04m\nFpjogGLuT+RFIjwUHeoDnbBWGfVgu6Asb9U11pySmdLAn4vkgHNHjU45G9hv\nR/b8qmLrYxYfLr20s3rtJNJqndTYRgsEdb86ww2yekDPl9QqJQZG1Z2uFh8/\nR0Da\r\n=chRT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.2","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.2_1644451257691_0.06442137512590262","host":"s3://npm-registry-packages"}},"0.55.3":{"name":"@fluidframework/test-client-utils","version":"0.55.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.55.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"cecabcb9a33fb5f6038238cc6e6a3839db36ad18","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.55.3.tgz","fileCount":34,"integrity":"sha512-Tj/u8ghb+QZnBYtK4Y45yyDi5XOS/A0V5favoHvPRLIAGeD0lcyK1RX+VA9GEdlNE0NnsJBM6SmZ81cv27Hilg==","signatures":[{"sig":"MEUCICgVLzAIqa8GMk/ZBsuIvCL5IOCQqic34furrBIbCiy1AiEAkGGA/u6scxItmkt9J7pCmskf2W34Gl/onDIVM2pnvBA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBbxsCRA9TVsSAnZWagAABjgP/RxeI7gytd8eIK0uIznn\nHNebj+9vm02rp331oTLirYUwxmRGsTvF2JSWa69MU5Tx5r4mw0vKHrBn8Kfa\nZGTmrExFMBWE+lZdCs7y+G+sj/Fv3irr+qszB5eYz8KLEDfjmvy96IwIh13V\nSmQaB+WALRZErU+3SdM7atGTJ+QcS42mHCNvYqlMRbpyBzEds2/F3S/hVaX4\nsuNfNFhfNxeyi7BDf+NVmgNrN8VGy5tmHCb1YDa7+kMabmGeYPblD2fzHrHJ\n/fSumhi4+qwttFL4HgkN2n06pUzut+ujPVzQmAh5pIzw5F3N0bte6F6KxeZ/\nSHvmQC7qFMLyaDOjOvSq/n9CnFSDlb/2zU+rOOjuSX5I19eLmtv1mYec7icT\nmmc5X4DnzexjXD4KBwmDvynaxjDOoMwq8hk5A9uLolGBjT6FxYyfWsEDsXYB\njCIqNB7dqQb9j90I4wV713xyqYUtnG0qOO5ielr255+rJlM6RSlyl8BYc5EA\nqGQkxYaWAnYhpWvycq+UORNTxVNaGRkgvN8mmBhDtX1mNcp119v71/ddl1yc\n/NGFg0jTtgqQXTUD+1gAC3i+/wODa1jx0dHpa59ev7nxbaIrjL/VkD5DLu6v\nYPd1SmgWM3XLhinIybyx6ODL5W+a0giZRRzfV3J+WzEabLOCxod29Ivf0tJN\nG/p5\r\n=9Gz8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.55.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.55.3","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.55.3_1644543084778_0.021954994631244062","host":"s3://npm-registry-packages"}},"0.56.3":{"name":"@fluidframework/test-client-utils","version":"0.56.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"89b5a5b0c6d8b5c12dff3ccf5a907f71bd3f82e5","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.3.tgz","fileCount":34,"integrity":"sha512-cojvcuvPScq5yvOeJ2honMBiHjRdPyhSye4ODKqs0f7jjbLSws7Oc0wbDzY+LR4BXe6VaM0WG/Eb2LBTMBhalw==","signatures":[{"sig":"MEYCIQDPTyXKocybdmAjverkiroPpfeD9xfwE1A/oGogEpASzwIhAOiZ8+CCIaES6HFlkQ51J17FucNw7VJD6IJpaDjL1OMe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBb0yCRA9TVsSAnZWagAAwUUP/09VP9Dr2/dD08C6ssnI\na1R6ZedVB7PISG/co4MXyZ+qwl93QPPEX1tvFm1p2A4bg5Fi6FSqUwsjM007\nAOW/efOM48M4PbOrbMqy9QrX3MGH7JiPPruie0BvXq+iKAMAw66fHKUzxF9j\nSRae+JSk+4Y2Qxf8ZRkWoToFUa8WLD/x+gCj9a1+EIE3FktA16JUNAWTJ995\nL9H5M9EFKcEVeLU9/MUjAFWJTnTDQSRzNY4OCbMVFW7LvyNLuFqviD4rxShQ\nJ2Qr3D82klARakwK6ZBBQUUE0SHDPoYnl72J0RoFqeBVzhN7oXb+bwwBc2zw\nLFXh0pUi7SYfKHWvwkx/EgnNSkq5doAirenFZ4GyDG/N7tfqho+aZKgHF/lu\nD3d/2SIHcFjyp7lKIVM8ihvVbSKYWbCQ0WIAnef+42vN3s0M33H+w4WC6Yxx\nLhDqkYT1eHFYbg+fK3q8lX1u6TeghaS7/Cnsf5fnEsjVtdSVkf0wRSqPEhVQ\nzFo6vp+kuDj5cWrR3NzieCoDeqWfsdOUj0K1p76b5Kla47qbe8m8FLU5IVcJ\nhRjHvmt8b6F9TR5Wcfjdhqx+fdGpMI6DBG5O+YwHCFa6YCZSWazha2EcUtAK\ndYmqKLEPdVtCFcr9SAaS4gRFkkf2lEeHpYG4iQfa2GAZFATD21VtPX+8U0IK\nMHvR\r\n=C+cl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.3","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.3_1644543282470_0.14037273583765897","host":"s3://npm-registry-packages"}},"0.57.0-51086":{"name":"@fluidframework/test-client-utils","version":"0.57.0-51086","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.57.0-51086","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4e65e2e48c57edcdb1dcfdfa39ff04e4e5cf445c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.57.0-51086.tgz","fileCount":34,"integrity":"sha512-lTqyXd7vB6kdLhDyEqGZx1gtV96jyDWN10edoIhUgPS5ztxBmTVJ2hhTyU7kYwLOa0Zk4kGkkOjKlv7L/Q8IFg==","signatures":[{"sig":"MEUCIDb6k3Rn7O4BK/ay7CxoZ5E4t/VB0iL0GF073o9nZkz+AiEA/E0it9IqYkJS9tVFWZ+XYqTmsf1NLJmA7pYF2bn+kVM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBwopCRA9TVsSAnZWagAAcpAP/32FDH3dv6GUq2Hwl9YB\n1RNlVZLEaET0iw/mt6rZVWrxG9A6AopIk34pykDOFq4nOuUqz1AK4nFIsB87\n9Zaua1gz0rPQKFpC71v43Zfm3c1tPoA5D4hsXtHiJA9QtummJBW6NL4xI0oo\nPOTMJFWKIGXl0kBEIENcxLXA0JSoKgMbXfW+BTvCfj6Lt/bD2I9tZYXnlM5h\nA2Rk4r0hmjRH/YLsaSCwZHf+Mz8u7NZNO86ps/NmV5zmmZS+wz15kbI0pIef\nBeWN59/gR2MK5WC3jj48D5kRunuD0jloYPJ3lRIp5N0XGoSaxMkQ3Di5t5NE\npeNwgZK7XGWOb8r1Ww76C/Itpen0TwVvdANF3VNARe65sAdqmCiUz9VrWw/q\n+0fd3o/C1jZ7k0pXwQOM+d2/MZdEjk9BO/qJSaacxXIL0Wj5IFRBerwwybGp\nBrL3qw1vKkQU+wWFGw/ZJgjzWSZQMhbNQhDX7+TZ8uJIpHxEmvTUY0LUtrW+\nbSaAikbcJv25rtfHAkABmR2WsrNrPvU5pqUozRcPEli47vmT2Qm8wUpGzlqL\nmoG9P6bzzIo6WIkXSqPjMQeQGnIyzdjQUyA3LrlOcWmObc6bpBtjrhuYhZBi\ncT1J2gzaORX1Uc32BqjkFRGTMZy+Q/xd1+BHJxqktA/ZruoHYUjD2QU17VOr\nMchO\r\n=hEr9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.57.0-51086.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"0.57.0-51086","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0-0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.57.0-51086_1644628520884_0.7577430495214381","host":"s3://npm-registry-packages"}},"0.56.4":{"name":"@fluidframework/test-client-utils","version":"0.56.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.4","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"882493f0a872c88c3ca4af0dec6e5488f7ea7afb","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.4.tgz","fileCount":34,"integrity":"sha512-Cm8HdmP9URXXwIVF6tNuQDeJlkzfC7DPC43DQaSmfM3pTlTiM0KssdiHaTVIllskmNkfuPSJZzvXgP1tXyYSMw==","signatures":[{"sig":"MEUCIFayyWyN6znerGZ94TKEqAz5kjvyiPUCn+TBF4H/5/iLAiEAk0IIy8M4DXMGjvlDNtxDkTgGzw3jyu14IRFUy3M1vwY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDqldACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpnxg//dXogagYlYBWh+lQap2ChgVcv/2Oe8W54tTCCm3gy81sajdn0\r\nf9Cm2IiVvLjZyiEMARw5vQ+HMAAf3LUiWcvhPguZOYMJqzYpm/JFqdb4dK9s\r\nSLUXSnheBBr3IJkE5BsPPxHEN/d4g0066gSupBXwg8li5YXUyrimqEBFoP1p\r\nDMRWldUVnUNySetKJ8pwNLs2jogUpeqeawLCNQHJMOgQ1dK2DhiY+suCH4SQ\r\nS5FbS4RPR+NELpve8akszwFuVnoG+Iid5/fKjO+/ikNLIAZ1O7ngTgassR/J\r\nczUAJUqk8bAf6eTTmjaxlLG1wVRBI1QGolbW2ZYHaZ/zAgiBvISuuEEs/C09\r\n2YSCRlOI6zSe4fTbCo+x7z4v3Pn5dEH9dFh6uvkgL9vrN7rR5zku5hVo28J+\r\nE/SEo5l5Sw5oHefIBu6EuMFw+TbJQe7sg8mcih5+m/kQRyuQ0wc6IwB0nC8+\r\nSkpA4pO3F30+nhESsZZcey1OaP03qJkR687wv99EzJCxWoXSX9A9yvOw6toW\r\n2z9lf+71qgpG9TAuWsMJZyo4Vn/mhTpBswkYvvu8EzF5N/X6Pxsr7VhmydPb\r\nO4mM57/zWomwuBBMm16qe3K5hnx3AMHgHlX83YfnUttFCsr+Sx0ZJrndOtnz\r\nr2XVKWG6YM+gLjTpAXOyxYjAweNyIgkMbek=\r\n=yI9r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.4","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.4_1645128029169_0.020938178168604882","host":"s3://npm-registry-packages"}},"0.55.4":{"name":"@fluidframework/test-client-utils","version":"0.55.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.55.4","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d38d514982db428b2402fa974b3c61f84df6b80d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.55.4.tgz","fileCount":34,"integrity":"sha512-fhUDZy7tEDjoNmLy74EFNSTa/+/AgkpYnt9uepMW6R+KPY/Hu3it+P1FH3+iWif5CPzTnaF2KvWccx8L7Wy1FQ==","signatures":[{"sig":"MEUCIQDZSX8yg5v6NSFqcFy38PE+9w8v/NqFisWl9yZ+OWc2zwIgcYOTtIkCR+dH4ISvGce5SgiwCXcXBZ5QsOTsNBGLUwQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDrs0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpQgg/+MU4xbB1B0JELHIX/7K4ufbVn86mdU8yZTiOPTeKZXG35+TYJ\r\nR1pTMTY5J8emQsuGDWVALwJdIqYoqGg9fn3fMzbHcnSuZTFtsl8N8LR2um3x\r\nTzDpN5PPrvUZDlmwI3YGuAtjVW5zDzeJoEqL0VHweqZjyNuyjq1V5rcrDTfg\r\njWivBLXH/1ZVgStlKfv6JGq4Dc/oTZSLhVJh/C0af6oNx8EW3ReQz8MhmUAD\r\ndBOKPTCWbW8ShUtk/EW9uPS2GtCw+2s/AsXEC9IK4vQ5VpwEmaZY5gK3Wxiq\r\nMmb5rAxJjXQNdxqxHzAPGDwVtUKBOdbnip/rhZ3vYL/Q6dmLlPuGwnzPzq9v\r\ndGYPjvc8F4aSebcSVm3reAHpiLMYPIonxRiHFpwrdp6VzXmslNDKJUBZsvX8\r\njEx+MCV8Zxp0ZfpYb69tlSn+Usb7WsyPoraF8RR+jdK3R+HBm6fVZnull6OD\r\n4MZTG27StcnQBSUYlLMkhx41XFiBwhCrYTS5r8sI2J88Ik3YG1zkA6wJUj1d\r\ns2JQhzR3UDugsWjpXYZcjOacsaD0GEkY5K/lRU2xlYsHuWdap1DFLGV+zsD2\r\nqpc/iJRDbVoRR50GQVVVFiJsnaN9dgJz4mU++Esal0q0n6pqZr3TqpRowzIk\r\nUz9XzKvBtnE4gexQFvRWG1KaktIAOmbQCNA=\r\n=GdmV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.55.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.55.4","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.55.4_1645132596147_0.6788291767860613","host":"s3://npm-registry-packages"}},"0.56.5":{"name":"@fluidframework/test-client-utils","version":"0.56.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.5","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d20bc08a6fa8e75a8e4c4a813bfa6fbb117c1420","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.5.tgz","fileCount":34,"integrity":"sha512-xus3dd8+VDlE1vfbdodx1iDyz8lC7Fef1LpiJw8H3xvU4KcJFC8BPjhhLrqlPXyZtzed7fkKSOZEZNwsX0o/Fg==","signatures":[{"sig":"MEUCIQCnv0REaIJA0JY8BCBeNT0BKiMXM2WDAk47WpZlxDsIHwIgW9lDqTupzxDflLelmQ22ncpxqrnI4KOg7F+LMRwJ19s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiED0tACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrTPA/+OWLvWhL8rDRKxJO25TBBXLe6OFJf/1hq7uuFY937859YO4L8\r\nBXpgpm94fQPZE0itgC6DFpe57Gk6MgwmXqJNy/fbW1GOgdDjQpo3/3Kk0rM0\r\nnOSNTpG5Jwrnm6Mt9nWjlUdU/cWdc3DAV1ZEo8wgdlOTgD+r4j9ZOy9dP0fD\r\nFL2AU5F/tlPBkV+Uy8ABqu9dKeeaDEis+MbzI7bgol6hlc8bbHJm0CSBMPEd\r\nHby79YdyGP5x3VeupjOCW9HCO3ITCIDdK7dMdKYpMIW9YYfusBsNfoKIFOF2\r\n3NT6Tq0qBpfdZ/cW2pGsxesB29pfSA0M9O7R1Gf1RZVcQiIwGGgOwD9Qw0p2\r\nakRs9Q9L6Bp2GgAVw1s39Dzc/qPqRgyYE6unSX6XOTNpQ3lRXahRMCDkw1uB\r\nbr9y8GUXvtAh0mqGfRXcT1HHFIJHc+CG7bcrI9vu+ZICZmZulbVlT3BYhX0C\r\n0GZXPF+Grij1TVz2MVwtXc76gY2VupCV1qRgrvdFwlq65Nvx7JehnF1wWJY9\r\nMg6Ww7BxIo4efk/ObqRf2GoGdQXB7qsQq+B8ksZC1P8Ln6+eSyrpwNbXxiHT\r\n1vw0UN66ssoT18IFqNCNE7nQJq4UhhbXJBGi/MY657m7hkIsNkK6iPcEJ8wK\r\nyt7TgVfvZyN3Nzew1M49cRQwvknWNLFYXrM=\r\n=nz8+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.5","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.5_1645231405497_0.29658391901555436","host":"s3://npm-registry-packages"}},"0.56.6":{"name":"@fluidframework/test-client-utils","version":"0.56.6","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.6","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"802ab5e98fe574539520de7dff6866888a7236a0","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.6.tgz","fileCount":34,"integrity":"sha512-SrM9SWZh3aCCGW1vatkdF9AlhHbQsQFmvFs3FlCIMox7YUIZuFeY0UIIgNGmGT+R8zLGHuYiNY5Jf2MmDCL81A==","signatures":[{"sig":"MEQCIBwxFfE1arv7vZGdl8tH+gEmGqIv0IrvaGx2qacT+JMIAiB3KQZIjOIirifac4i3bn3AgysNWykOQWznqzhXYTV5DQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiH/nvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrIUA/+K6ASNwxivjnbzZnyvYY9kF7Gfy5pi7p3a+9oTlSGe5SiWY3b\r\nYcEGXLHnsAJZL9T+FnXyHaCcdZCJBUZ1OChM0/EkPpQur8Ur7Piwz8pR7deI\r\nlUBO3wgvelH0cTPrPR4ZIqWY62rQPmGgFIZi7N4ELTsLGklKYY3ErixJJDee\r\nUbFHHSxbBHLLZBlFAcVRvOIUzShq+2CK88aIs0aPnG1IwgEZ24yPloItwH5i\r\nzylLlKA1R7vCZrCv//ugKsOz5j5ykoRzqO0e1VYe9u+dEKn3NHJ3ItZKLH8z\r\n3BLQM1ANXcJLFBIsOwK7u8Fxk7GktEXX5c16X3BzRwpoBOkOBB2rzd0Dc68k\r\n53nOaOwg0poCEI3IZvUz+lxfwwFQ8vP81e56HSCquIiG6N2euT9GOEcdEQIb\r\np/EHAESUL7VvUT9K+crfnRPHVYEF7HZaD6y4oLdxtscsrrJwU2/YQqegB2xn\r\nCZLWbTAw/ZE7uPMWdfCm+GB+Pkw2lubKzdW73uF9FMQ6LbwDcBO2JAiOdL4h\r\nItpPL46B1GAMoJf5usQa8dEUZ3yRt4x7SOIKIINYsmFPFua6RzrjRsI8IgfD\r\nZAeqjge9ZEMLWf7VlkNP6xWikUD3UwkbrsrRiZ+colGzKjm14IBpqdb7dcD4\r\nxzJun1Mjbg2mvO/HgOKImxpj0RDQcxi5ALw=\r\n=GwOp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.6.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.6","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.6_1646262766991_0.8248672586211934","host":"s3://npm-registry-packages"}},"0.57.0":{"name":"@fluidframework/test-client-utils","version":"0.57.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.57.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a2e3baf086b12fba8365f5ffd05271e150bb08f9","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.57.0.tgz","fileCount":34,"integrity":"sha512-HO0449OboX4/Gfa3Ej1AL8HO6TM+FCuwxoiKyp6cGycbfHKB7n+uTFN1G1CvzmbMJHXWOLUSFLLK24pzY6M0Kw==","signatures":[{"sig":"MEYCIQD10aMiBgUYz4z6nYtPRldGjNwIVFP3G3H3ALwWYz2TMwIhAPefrrCXnGXVPmPkmuEKwumPvudbd7RWFme3Tv4qaAow","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiIAUqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoNWw/7Bnkml9qa3qy5yZfsJ77Vq0jbhe8gn1sB3Eg6iX6rJ4qXV1HS\r\n30IN6i+xtMMn2N86pAf9Qq/M8Qv80BB21pdE3ILdkpxA7igpdcg3FtMPh/d+\r\n190tNSY5V9MJ/NxZGMP9OFc8E6EAewq6hjEuQURGNsdYvL68jiyvq0Qfw8B1\r\n4tBH/rJ58AoD67ptphszh8YF7e0dzIwXNqQVwDecrLe3XLZuavlWUs9iSPtY\r\nZHDpsZXUzK7rVYG+WjYr/SpX3bSyUQnBT02X+1Gv8+gptYM/KH5zsasykmKE\r\nNRP/DijEdjhUvySxDezlFTYB2ClCylWJnLbt6LXjwVlwVVrF9hX75wNa4CjX\r\n/t9pnALz2tZI6H0N3wEejaDjg1PjEzo+uPH1x+DkrWtwWPSnXlAx13UCE4zC\r\nezvbsZU2lYzf/Iu84Nsj7rvrKrZZe+EScg+64+viUQMrDevWThJNwMfjPALq\r\ntzRkwwhuacWC2qaEXxDQS+9neXQVeEJwk72KkVnnzK+2suJHAbfYa/oPKzxh\r\nHNi0AxOMvtLK6vzLIoHUB4ep+rUQoAiOIlij6wJp+qjC3TxQenGG6H6ydp61\r\nrSuqiTW8MqHXCjEQQY/JuFxzhOhamMuEVnz+OvNThh/kF1IyqoWHbcmmadh6\r\nUpq7oDgY9Qz6SBdE/vWaSbuBEKjVPC+AO8k=\r\n=w1cx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.57.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.57.0","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.57.0_1646265642098_0.21626518527281635","host":"s3://npm-registry-packages"}},"0.56.7":{"name":"@fluidframework/test-client-utils","version":"0.56.7","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.7","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"60684b76c0f92e265bf0913f41715b2c04a692b3","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.7.tgz","fileCount":34,"integrity":"sha512-FBG2kr18KdA+VAPRS9jD7z/wSfZIBhFB4/DDTtvdmApcNPZMVtPIeQSRmx+xWFf+BdcE8N4BgFmiwAx9yzlyYg==","signatures":[{"sig":"MEQCIFY+tu9dVimOzaBbFmzCFGpENXy1VJkVVzZR2hudadOgAiAfZIrQa5ZIR94QOsK13rQ2zKD0dkimB3PpVrmWUY0mwQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiISKmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrKuA/+Obs2S93mVC4kYwx31XPaukC8TWG6TjLptN1Q8k/ghlYXDje4\r\nkXjq/4Q14RMLYhtQTa+MccnKyQu5byX5vOYcYwxBsn76g9uT2LOsRVGkZRce\r\nP2eCtc5iKw876uKus9jqN3T8ogrRiLG+ZnaCbpMUOJHA4eFOxfNJRhYc2Hgw\r\nmRgmCVo0oVXhVruANE6e7bTozF5AhDOeTRg4REYpIeZfwmQVygcVj3tVRjYC\r\np8UibSph9f2nLZ1lRV5jliuuKbqNia2yATcE+rrIRf6hGEfFLkthPSOpTjj8\r\nSrVTnry4UTWNyiS+qtVF52fd1/g62bVgn/WcOrHu3jIYlIEmYdEOxkSr9XEE\r\ncMt83nHxDNzmAWRvliG7s5MaSBklCRPobgxZgUEtyV5Riz42DWVYRENpi02B\r\n6X3++L9VRvhosuxs0suJMG5OKhEN7iu4s9WaPIWZTqAnBOjSeF7lrZs5v56x\r\nUfHq+qXrSAyywfLuthj+cWmL1k8vDfOP6eXp9yw7KDijGLaum/i4MWgR7UzS\r\n4ZLzEb6PypJafQsh1TL8t70iPD7twtVed7fVANjNF6ehRG8PqXL2J84lI6NC\r\n9vjd5awB5kObtUkUdZrwCp6hfT94WJ9TfGYhf6OBD9ZCvLzd7JBEKha1wJ4K\r\niQ3KD3PKs7HLOa5qQzsc3T6oQafAuhZiU/c=\r\n=ZXu9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.7.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.7","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.7_1646338726316_0.9275707550324201","host":"s3://npm-registry-packages"}},"0.57.1":{"name":"@fluidframework/test-client-utils","version":"0.57.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.57.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5c141201d87243a9e369be6d566aa0f68a34ce05","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.57.1.tgz","fileCount":34,"integrity":"sha512-DzFz/tKxJRKvrbKeCmJrQrl27tBBZjHR5rCNljX9AklTcAY1SF0GLzf1hPifoO3ZcN5AQnLqwEUC3ETr5CejUw==","signatures":[{"sig":"MEQCIENxYTosbHninJoLXYijjxOYMhcA/flu1QCn6U3+1dmeAiBrfe7XWtTGFpLHOTWqhjKH/iSfXiSlnch2diOMNyBuhw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiIW/2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLhQ/+PrMvTSxTsEPETne2tlO5rrCg0MQ6m96FD5lSdpdz3CFXqXF4\r\nQKKPmkiVZs21JFu/WyQvLqbJRnbEZkboWy+pIe5ICXyqkUZgOfYvomnRSncM\r\npEAovDlzPVpezGI7pE3fASjXuE77991iQqFLs92F6viQu+gbQ/tiPPGrQuDQ\r\n5UllWYRGok+LwyEtj01jSTEs4Geg+WAm6o8gE/eGNDdXLZz08VLg7ArKTQrc\r\n/ZanSwpzSKs5tt1/IvYBuVaz8HT8nYq3qMlRjWzXUd00LdnzkgLcXa+fbaAa\r\n9W2Y68x/hW4gFJ4pHLHrEBFCIY0nUlc1xoX9Py+nFzWYyiwbwAnsx/FdyPKq\r\nDxd1ioT6+qgKnreaO8nJVIy7sCF8XYIrlqjspVw8KPfgsnDs5j3L+rgnKz/U\r\nxsHB6MRUdRiF7p53SV2a5PqjPLND1UvooC7x2E8oobRFlk8KTHZiY+Bvqw/3\r\nLCppADJy8xMuOflEoZskhgykeLzw2Vyczo3BVZrwz5XXWGnu7BYocukowq33\r\n0C4EK/FajMNlKveaKzizo3We97+3qfAMxpYLxo5iUilX3WXpKIRgVvdp1RQH\r\n7oHgFk+tS9snn44Nfb+nSboE8gRc7aIGmTK1N6ZsumCjb4v006VuKMj9aXTq\r\nRjlKHEwTc3eOyoe1B4lwla+DVS/LzYC85Nc=\r\n=xF3H\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.57.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.57.1","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.57.1_1646358518676_0.16581248808286775","host":"s3://npm-registry-packages"}},"0.56.8":{"name":"@fluidframework/test-client-utils","version":"0.56.8","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.8","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a6f405ae053e1ca4df5b1f324cd85dea25d3365b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.8.tgz","fileCount":34,"integrity":"sha512-uvT513RvAX5RJEpvn3I7ZVYxMUxPde/uBtL2eVUMl0gG9e6O5eKBavw5dDyQTMMMGPzDejilTo6GY3J3YShBxQ==","signatures":[{"sig":"MEYCIQCRCm6Dba/Wghl/jxE1qk0bAhtq/z+nt/Ygl7Wbv+VDXAIhAJGdxRCpCCRwVLvrO3o1vEFCD/fol4m0pEdeyLK2TRv5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiIl7sACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqpcRAAipGK4p7mQA6eMKSRtxBaS1LwHC38RaFDedbHLKlZsMO32kMH\r\nZ+tGO21Zw9twP3xdCH5C+AhtadMoG7mqIGY0Y2E0mc6zCPufmkmn74u+pncl\r\nub+AC8SUsHAV8PQ/G5VQGN9tSD+5G/NNuTyCuqL2ov6TTZycdZOx9NMRg6Q1\r\nStSqm/shHJf2U+S9/CMvQSv7o+Mnl5DltqQUdPUZsAqIS2e4VBks44WCbiix\r\n7vTeGuiD9Iz48TjGTD0v8/TU5DfqsVdv5klCWMrr9ahovG/m4vUAakxgeECw\r\n+3GU089FSMoUvns82mm5WFk/NG1bRuCcbDEkc792UgAx0soxSb/h+QKfLflJ\r\nI8pzG+upe4NW98vUYBKxZs4gJDKS57akYfdXrc8wXejQ2SqVUA5J2yVu0jMN\r\nq3QZykYcc/QO83dXgEVph+JvUZCycHp3+F8MxPrpnsAJ429cPkS+bQz1d5Dn\r\naxMMgdg3Ly3mFgyDcoBzCuikEeWip+IQbBuGDCqZ3gP41+Cb/BgFJG6CcFIf\r\nhbZBwFGmBug85yfr0xm9IBj35UD1ZlcHpy5kPkCpj3eRJfq+reDPBJZQoUcI\r\nDdZRRSdweEK4C06OHRVAWA9mvomvIsgOQXLfLl/OcdFaD3fhTO6SSHZT3P20\r\n/ALy3+UeX8mP1FCzpxLRYpx3wmSrGuaHdzI=\r\n=Uh/J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.8.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.8","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.8_1646419692717_0.2815946199834958","host":"s3://npm-registry-packages"}},"0.58.0-55561":{"name":"@fluidframework/test-client-utils","version":"0.58.0-55561","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.0-55561","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"72b851393c0985fd1bb5219e1f0ffc749a40ae66","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.0-55561.tgz","fileCount":34,"integrity":"sha512-b01JMb4Wb7pb2lL7Z/c1tbqoxUMtYPeerI0TXlhf0G9k6KaptZZBJm9HVKSpbJOxWKWNg56QWBnFLaw/3bnXlA==","signatures":[{"sig":"MEQCIACkCGjjVq3S7YJXN90CkYUEb91Apa1v5uirrLoJB6mgAiBjg54fbjzQjQ3LGzCpvBFAUSxnLH6o3MxzhvvCUxLFdg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiInGVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpiVg/9ESqfZUhU0z6G2CEJ+Rv1i/QwsOLTb8z86qCMpP//MxHktYBe\r\nIteNSS/4nPoRPVZoyQpZWiFRRJvinOLZ8TZkH/EisOdPcaifBUSlD/BBocZ7\r\n7lw+wxWM056LNAAkZ92Uv7kCMIn0Rz7bijluQsjTSVoDs5kr6f2499YAZsBx\r\nhY6XG3xeZU8U66ihbCoBjejIc5H5hTxwZtU3CvaTNBsICEhwTEMbE2selTFH\r\nogUIGzM11BAQI2WTvMyBtwhLTGbw10ERTcejei+2R12wlCXp6+0NiEPx6b76\r\nqcT5/FcKZOgOQVj2wG5lsYlUbQc6zPkZquMwyxi7ukNDdEATJsrag1DXzzac\r\n18Z+Tj/CrWGrhuVeu2KqzsepxNfWSxz3evWshNYS8K7vZ2/SDIjF7SISthji\r\nI5aQjRT7kZQ3y5O2CIuAG8D943LtYIW6HBBPWNE0i1sY4TvzJhjoMRn5e2FH\r\njMYgRSF0GvUpvYsjHjLuPROqnGCKqj33Ml8muMV0ybK1voQsFmoxfqx8JjYk\r\ncgNN1wkLDFH8RGxVyOetpVV3/B9zWUD0ijoyWEOdfqtcVzQwHCdDX5FLXlqI\r\nseDXKoxa78FxgWD7UZ5DiRdETlkJmET1kSZk84zzRrvPxN+5bpSLzKGdYqTF\r\n47T9Py1UF7AtyFkTIGHcsNLfZu8GJVr3+mE=\r\n=FA3/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.0-55561.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.58.0-55561","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0-0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.0-55561_1646424469338_0.3288558240279995","host":"s3://npm-registry-packages"}},"0.58.0-55983":{"name":"@fluidframework/test-client-utils","version":"0.58.0-55983","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.0-55983","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f1d44da2114f7ca482b40b6406a22bbbad4018f0","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.0-55983.tgz","fileCount":34,"integrity":"sha512-0FuiOLYRmj14LMr+AXf1nS2PNl/cWUwWkQuuga3IZH/L847LtaRTnYAtWKXLz020iMSBFY0x7pDRuuAv06MmmQ==","signatures":[{"sig":"MEYCIQDkZf7Pp/D9hTcpBYOKzbkIUY9eKog8fvuqDZPZ5hoBIQIhAPLwiEuBFDeu8Z59LLcYNY/bzuNWXzidwzWQlp7uCX88","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiIrSBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpShA//RSlYgy0qvaD7u6Jb36AX3jT58fWfsx//T+cfX1Qj9uERt4hn\r\ngAhcGayYetCmXXK6rW1gBGPREbt7kvvOCtpz5+GZOL4MD0hQ/GUetRGyT7tw\r\nOpo3VpS1slOaXZK0rMCZmyA+cvFRZP7S7WwRqfOjFKSCq3Gfus9jZoA5+1T6\r\nT7LAo5a+lgRu9TWhf0jdvN/70mLMefpz+J1LY2bhAahlZpljD+N4y0YwOQaE\r\nlHLd3QLQAn1FMJxzCfUh9R4AZkfopljfA2wcUAV47GQ8vvX6rY/1XrT/qYAS\r\n6ue65Qi4YSdR0Ib7PUE695vO5CDkYFYmtwpBlozsDQO5756nlbYCG7JIVX29\r\nk5G6OGtLDv0Nq+eTL83pHdjl4uG0/yFiwDvQb6VY6mxZkv/l7mcZ9jalhkCx\r\n23TN/boZYNiIHahdYrncjyAK+jnYO2uTTVyuJOo89eF6HLFs5y2oRFt6Sze4\r\nXVGbKX4theWgVuheQZzqzi/e1rjO3veiWj46+qaMmH3ykLucj3cTxDN9tw3j\r\nGN6FeOj6+8QFbhhn1GBRebOtrJ7URuBCY/RmJg+r10Nbd+QX+TEcMr/2iueI\r\nZbJ/Zr4QREbGoNrFjjGnMgUUBXZNrE1DGXP925smSWk5eQujSpJNOm6TSzCz\r\nYWQAsYh2Z4frMCvtf8fACuyXuipBRM/2cco=\r\n=9Pz0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.0-55983.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.58.0-55983","@fluidframework/protocol-definitions":"^0.1027.0-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0-0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.0-55983_1646441600888_0.29909813852991696","host":"s3://npm-registry-packages"}},"0.56.9":{"name":"@fluidframework/test-client-utils","version":"0.56.9","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.9","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d663a7b825eac4681a912560963efa3023387150","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.9.tgz","fileCount":34,"integrity":"sha512-A8vPB54+QuEBhRASsKKFFEMuTwgjY4o04/mTgL46q9SL9EEFr9AijyZlP+wNMJ/EBlp7pTI2yK0KR345B/pK2Q==","signatures":[{"sig":"MEUCIBmpK3fQf7/QW6hhzGgbFB5NLUwIomXBTgisZOKNmXSmAiEAviZxa9SYxMpiLNbwiKzaZkSzahxy3Ow3uNoDmKnKt2Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiK7lQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoV9g/9Hi3SZKgoMMOlyXks6wWVsmC2ELBIPmwarxcqGEBOzxzDgAB/\r\nCaENySqx8iVi7xX4MMyGTHaQEL2/TqcxTB/me8W0FeQFfRZwlKxYs5fVoGbi\r\nAnJ5kJLwq0U/n8syqMftUIHqYFEvrkybLAR8+JbrIRII2waru7MORdl1YO/V\r\nFbgqMkeLxWoYlfHNyivUZoFU1j2EIGuydEKfXXLl6zI8eBYTEAa7WLLJCkOa\r\nggzuwDBwpvhSrtyccDRMcChPD6FfM3ao1ggK3EI6uou/Rwed9yEhAArltqUA\r\nWypz3JaxNYRvjGniuJ8PUEZrFIKvSwEpGOs1/i7WJ0ZLwacQlVb1EacXQyK4\r\nmIq/RuerTtFWANID/imEYtS80wV7ZElO6KozrHBx5FbvpPaMaFPmPoimhZrw\r\n7YPpatEyK68LvQolSYJyrL+9y06OlR8JvOHjC7vmlGeiAB6yMhDTKZZw0Oiq\r\nRiZmTFT43up6lFCBM56JG4lZNKcKwfBkiwR5QOUtcKgoUNW7oFKI8iDzbmDj\r\nbaT2Q3isRUYPBZhS8Uf26w0WDvZTN4NUw8DkcWqhKaDVUfqLBMwLoHGRQznZ\r\nS5j0SlbDLSz2HBqU3Ys8El1aYtRjd3qt72OHYwkrXCkBGwv1Z898uVGGSM6V\r\nCd2vfBArsnTujD4n9jgnmOZABSQJGXLL7Tg=\r\n=Yh7q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.9.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.9","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.9_1647032655973_0.5848206204623689","host":"s3://npm-registry-packages"}},"0.57.2":{"name":"@fluidframework/test-client-utils","version":"0.57.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.57.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"963fccb9b25a9a5689ed9477bab86fd25f48d93c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.57.2.tgz","fileCount":34,"integrity":"sha512-4VAOfNcTcB9PfWgr+RdXHqFIltpe0VC6DllR1BPcJRkuFJWWhqV1b0rTsyHwWGRySjshXFMdGrn5eaBE1x5LxA==","signatures":[{"sig":"MEUCIEQZdl2n/2lZND0Ykg17Xro1KUhNL4a0lbc1AwlHmrUjAiEAvrxHVSol9Uvu+/UD2gT/13mieL37ex93ZhnWzE6t0pY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiK+G1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxIA/9FLMFqmefXKmllDUph64mdFCv76i2odRTM49Em2mlEmDaP8u+\r\nEzHiZekT4u6jGHuWf7atRonDVXQUdN86+edvSoHeEwMw+PGCcQ4RFBz+VLdK\r\nzgKQirDVg26sYV8cJlI58jx5EvY6pfVL3eTvuiEpzBVWGSmc9oO8TqnS71TT\r\nvtrKKdIf/+Lgiw6ewhOp3bEi8ajlLCLgogLALWn93soLU1vVhu3Rq3uqhhcb\r\nWZnPh/hkiani0diHrsxU/r82USs2LzaXBWzKKF3Uvc4Oy73juLMSeJoNT5Pe\r\nR+JwAymZL/aIm2nsLnsAbSYIC7pDY37nJB+Hbfn93zCA+k+gtrIraQ+28i93\r\njboNWn+i6VwNLm/m1EoftF/l2bTPYX4ME9UkaHlgNdXV1xhUdmIf535aIoNg\r\nYY93EPR639ji5m3wLhMIb12q5VARMjs1BvsrNZnjrtI9xNvcprs5TplUza1p\r\ngh9bK58CH9wHEbs/2cXXOJeBginBerpJHDBwNZE+yqdVPAs0aJK8AZHn4vnv\r\nQuyHkW6ThXWH1B6oRhzbzUtJBWljbeL2nIrAbYYM5L/3F2q9bgRdGJwGCYq+\r\nbTbVIGpl9y+Nv4XlB+cy2OKZu3lJe2wLY3rUCMFNAmupaTALGMEKpSAeaBon\r\nNZVWcBOb68posaBjTuhv20wf30JUWRkywDU=\r\n=D1l8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.57.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.57.2","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.57.2_1647042997518_0.6741101415999069","host":"s3://npm-registry-packages"}},"0.58.1000":{"name":"@fluidframework/test-client-utils","version":"0.58.1000","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.1000","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"6204f3805f66c5776703ee9638e717291ed53e99","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.1000.tgz","fileCount":34,"integrity":"sha512-3NrHE0jxnuZgXEHzdkP02fgsaw3sfjpPtUciyIvVrBE/C9x5Fj0u7bRj3tzyAs9X2JSm30WhH79GytQyLC0Twg==","signatures":[{"sig":"MEUCIDF98YyVL5SEBMG5TeyiSR0PF1TPldnCMRDw0QqH6hKXAiEA/VuN/rQG8+NLxj5caXmPDKdQXTnzDIgC6clBcPLs8vE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiL6UvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmphHg/+MoFzHDOx5G63LR9OcBYjeVLBF+FxTOzyA+67+GKfLw2tegc7\r\n6f1z6pUAHo6j2Y0XI7743ViiFBfRxiNuDyFG4mH7BlXQ3wfBZn1cxDAuXMlw\r\nh8vjea19ueF+WURNmpveTLFsQmB7U6ZLs+klBKhZYK6E+3TEMsNIXazHyk5c\r\nWHdCbkSbmqoa5Yl8WcTx2mAFsYjBOJYTF9jtv7DOP12w7PiDPNYkmo1BLv8D\r\nL5kjkwYWcWcw+WUUYNMyt44CEaGvUnfEOA/wPzSiyMXfGlCfu38fCq1HIzcv\r\nIiUoSEDhOcUjCsQScpojCDYSD33P8yhlkONN2ZptsiTFb8lB8ns6Drxf00j5\r\nGehT45kD6mLkXNkn7vv4IfGUHm4phSEGnkyHNpK9ff7pTylRJo1vOOmFt2fy\r\nzqh55AkgWZrAI8pyl/tjVVjh6uZm2S0W0V+u8t2XAnem3db+ZvaMECERw0Wh\r\nxmMnLBZ75tDB425W34ZkPyL6+6xUAWXOE7FYujf2350dxXJUHfMU4dGdunmH\r\nvRnynEeNEhIdt3dM5kFCayOONOnSnXHGGtCH8p/WfxbfQvSV+nRZELJHrcND\r\nV0VBEKnDmwClKUhrNeH0TjiokGMSnNR0cov5AV9ESQ+e1Bw+Vwu5F1Ku7Fa/\r\nYqHxhUDxyz3bh9eIr9AKiqXKWeekYyIyIWQ=\r\n=pVGE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.1000.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.58.1000","@fluidframework/protocol-definitions":"^0.1027.1000"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.1000_1647289646909_0.15892415191444353","host":"s3://npm-registry-packages"}},"0.58.1001":{"name":"@fluidframework/test-client-utils","version":"0.58.1001","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.1001","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8cac049c509cf868a03f07b40823118f36c68636","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.1001.tgz","fileCount":34,"integrity":"sha512-GNPPJLruAGF++ASnzej8EN75iToc8AtyRB1yI2NI37yfPZF+soh0zyO6iu3Iap4oyfvKlr4zXDJXgihV/YoszA==","signatures":[{"sig":"MEQCIC72cHbjcBcq6b4RD/c/ILSatE8/bnYQeHR6bA9OPTSSAiBWB/Rr9p6un8mxtHA8YtsXzG0rfF6q+88Hsw9GdRnF9A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiM+Q+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqD7xAAhntAiwqV4nqwaoj1cY3A2uhcyRRJjaVS05OLKRqLAOwmLRw+\r\nvw9wti4uI76DDULPIrEqoiPbxEFX8jW7qFqvETXO0DNSQod/34F0rx3wycwC\r\nIvImgQX4pEG9pBEayGJcBqUb24rtmqaZLZSe83OcQSjSBehXSf8PPU1jcbk7\r\nlRgLxT5lY1ISBAJL8F7cn+l2EJoYfEU0JpT88ykEJO//IMWiNryeF4UPhal+\r\nbcfzS7ERTYNgRw1ZdaTVwTOXrcCdRfFM1aMcnxZGnlASX9xTW/4Vh/7XedkP\r\nxDXlhuEKfupZgv4WJEyQXXxrqcYU9V+KisI2jcF00mKIeUiOXSUkkxB44h16\r\nBAqg+5AoxXZ3fvnGJX9JHfFIqK8pUGGYmflJ1rLaRfaevPhKWKYOtLuaSerC\r\nCfDdhn/g5TN1+103g7AcOLuQZ/xpKq/TqRU2qKrihN+hg5eut0EfViJHcAci\r\nh3aXLbcZXONMWFX6hhVucKtKd48cHmATCzcnk3MY/0oq/aHAxyyk/XvrE9Pb\r\nUv+qahPFPTO9gKcyV5aXPy1h/Jm3IlQIlLt2NF/YtT1ZXF6zeQfxRwwAR6RX\r\ndk1S8UF86Np/aj9OwDPD7t1cDDYPSNQBrp5s7jf5TTJ9CtXiJl9C9FDAtzYk\r\nzelTkNxACmFdmQgdW5AdGme7HJ+i/YClg3Q=\r\n=n135\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.1001.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.58.1001","@fluidframework/protocol-definitions":"^0.1027.1000"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.26.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.1001_1647567933957_0.8387920633707875","host":"s3://npm-registry-packages"}},"0.58.2000-58133":{"name":"@fluidframework/test-client-utils","version":"0.58.2000-58133","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.2000-58133","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"6358cf19eae8a2a9e5d2fad8bc3206f350e5bcf4","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.2000-58133.tgz","fileCount":34,"integrity":"sha512-2ZkZPcXBiuPp9yGRoR6SpAVC4pTh8RPfyvr4k8A55gWjTRituYEFzQKKh2/et5FOuVuQvD+SR7LQyZAlAd9hSw==","signatures":[{"sig":"MEMCIAEsS6FWgSTic7xGpv4g6FoYJOICpeBq8NDUZNC92JslAh8YolKzxsm8Ru9hS96nNk/tbRj1utmhSQ1tynr472cF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21042,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNQRtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoE8w//aWu7NcCrCaSR1EIhNgZhJLhHZRZSepbHkXXaRUX+nvx2p/w/\r\nF8J66uh4KpaT0LCczH8P/VMZA87yMT68TYtZ8MythYrMwRKl+KtILC94aW46\r\nVUhDGQcnbs/usuhqLNcPcRPRhoiWUTIV4oAYROnvy68Btb7kJeIHLEGUQt3k\r\nUqNXeYnEsZe+CKSN7q3LEq4JVMr0OCW3Zw9xvAgLMj/K0Zvnq4Baq7qXEByL\r\nxg3ARGCfxIRcF0s7nr2SGqXPU1Eb6yDu3BE66Sw6Z6se0J7xDHPNK/OVEZkp\r\nEvPcpIl/sHYgRk6JZXMpzx7SViT53Lt1YTGThsZC5fgJuJdlY+oAfKEHERW6\r\nT8OU6Tsa/051Dfhhb7QenZxdgUWnekwPRolvwRpQuvAwoMRK2h70An3tJDnP\r\nxJytZTHlzXbzSHd5VtOSuQb9INatNGln9QPfPAWLxzOtX77oedszkwvkp1EN\r\nTTHtL4arx+B+fTonj7XS7eRGwlTGiMKWcxBlW0SqP9NGVSof57SUM2QKON8s\r\n7mqmeIAXmDF2Uu0Hda32ZSisG9KrM5b6tSFTwiQF1c51fHTiu0Y/K8gItfZp\r\nLFOzS3Bz8wn8c4lvBDcWPc5WZvFmu972QO8KdQ0Wfxsz0857feTUa16JzouD\r\nZc4vjmJvBHa62gRdBTQ+WIQ4awKRhH/Y12U=\r\n=r6br\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.2000-58133.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.58.2000-58133","@fluidframework/protocol-definitions":"^0.1027.1000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.27.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.2000-58133_1647641709641_0.7005297293587804","host":"s3://npm-registry-packages"}},"0.58.2000":{"name":"@fluidframework/test-client-utils","version":"0.58.2000","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.2000","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"bae8fdd9b06c956f246d64e65e38f42bda055758","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.2000.tgz","fileCount":34,"integrity":"sha512-lWyyk/ewD0ZQmwpU95tarzac41kVhauKt+Q2kycz3FSI7oiB1amyYHLQrg5sVNCVfhuo5edl+zfT8RPMhfHCuw==","signatures":[{"sig":"MEUCIHihO3dQb0AP5Av+jlz53fnPv0ICpH/Z0wCaYf4ZcMjxAiEAnGiTL7ifLbO2HGCXWebaMI/LHN/A/+/sZuI4g186uog=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiO4abACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr4AQ/9HJRyxsgsWZ8x/g/5h/jIXUKa75vGqlmML2ue0YGfBns6JlJO\r\nry4JsROZRJFnL96O2ND0QlQgqHCcyWWeVlyg2RO1TLJ1V6aavU86KoqS4pfa\r\noYtuq1/MjibDH0zhlRuPCrpeFWhne0EIcvwV9t1vugx16YnEP0khn/mQntqD\r\nv9FQ4oFKNJYKHx2YU+iUV6wbNmDqMDKm2WZxS9Pm++NwvxOlCa+xlt5YcAiG\r\nrPAVRB/n0UKydRCC5e7lMyOOLs7UW5HPtwzgZBWzirKgROXgeDDPC+VWv/HZ\r\nGw+hV9tfxkn8wvqgRhW5uRrZe9Lbls7I8JH/TskvIoks7KupzMTBcfg6i3YT\r\nJCCraXQHDEhGOPCM7JvG3AdFRyFqotgEQGE+9xlWihseK3yx76w8JOX7jRYY\r\n0P6WvShrz9hSlAtAWDUgF/7y7j45EA05aydXr2lMQc5Vqm6z6F1H1xsSCJbY\r\nN0pCmq35t6txfWq92jqGqZ3frNAy2NGUT3WAhzD+TcILmwwyXrDIS5ZP0bdu\r\nMfGpuZUBAtsANBMK4Xj8YcbCXbHhJKbrJVknJXyK3QO50C/mgMnvXNX6ziSm\r\nfN8AuJ1sFfSvjM6bVJRuO6eKeqF7UngriHI2TIxeUSctUdPDm0dBj1ed7ZvC\r\n3/uM3EKV/rGQBS94zDqgk8EpvXDZwgF6LhE=\r\n=XPEi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.2000.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.58.2000","@fluidframework/protocol-definitions":"^0.1027.1000"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.27.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.2000_1648068251498_0.3954293517105032","host":"s3://npm-registry-packages"}},"0.58.2001":{"name":"@fluidframework/test-client-utils","version":"0.58.2001","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.2001","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4b6c599e46f00653097ae3df0b9b89503342de84","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.2001.tgz","fileCount":34,"integrity":"sha512-V42JrUn+LIRAmOwZ2qxZjLZmutlUfg+4cq0gzJaWVG7qGTCBpzFDwMxxnUxU8/U/ldzpW/mJx/uAa2O+IAW4Zg==","signatures":[{"sig":"MEUCIFoDxEzSNvL7RVSTi5Tw0fA20g2fbCkp0zfmAnqQhEQ9AiEAlgzJ6BKPfkVE7EGXHQfnTA+u/aM9nZZyTjjU3rm2gEg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiPRYrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpNFBAAoeAYBCW8vhLgL7NiRwqJNCatEbd47PVZXlBW/Xyw8XBoJD40\r\nYrccAlVjQfZ/mMg02HlNn2oF/mVdCyI4ALePmdnIaJb2jPtc7bVj9baQJuEC\r\ntIYJdDGuelaESlfTMu7T9EVveI9c3CBkkYV1pYp/Fz4V1YSdZauH247YFdU+\r\nUIbLjWa9ZpT+iQddpd5faIEnsPRgDbBOr8c7teFhjByXFB7TzSgV2GJmB+lV\r\n0sX6leHGVpNwXbdJooNIPZuTFcJjlg/bklfie+Ulws6C4+wagi12qPVGCzlM\r\nLU39xWHkZtahgzfZnConvh39Sa0pyGJPKiNlSxYiH+COi7gCb0xpECIXb9wz\r\nIt9Bz/qdS5evgG/HociUS1sumkCENgBsmOKFFktSgdeY5+BR2dD2wNdgshrR\r\nkVfiDXu9bofZhEcWdNDi9qTO7Wu8VyiUTR21ZhyKoy1Ukc+WGauj6nhe8OJB\r\nMugS26oumq8ir9zx07j2yYAuNulgOkoqnT3+J2BZ+u2jYx0gaOY6NZUyV16L\r\nDufICb/gXMNHmKK60kLcPGidBjylcOvdTQdczPR2hWJ0exOk/EcMPtdcJ0pO\r\n1UIkQq8XOiluu2A1cbWnPxb2eM/B/OUOwE+GAy8BrZ3tmFb2uKAHYxG6Meaa\r\nusS1hwdWlZ0kPJHSOJbgUgcNk+zuRxHpXxQ=\r\n=qp+0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.2001.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.58.2001","@fluidframework/protocol-definitions":"^0.1027.1000"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.27.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.2001_1648170539202_0.0910205308917702","host":"s3://npm-registry-packages"}},"0.58.2002":{"name":"@fluidframework/test-client-utils","version":"0.58.2002","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.2002","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4e48f505298e1fe127f556e3ed3742a15a2a65c9","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.2002.tgz","fileCount":34,"integrity":"sha512-yqqTi0yO4nOvutKlPkUyio8sjmdM5amES/dhd62xymUq1/Rkbk4R3NIpc1rZaDP0HlIaKmCTk3UEwbnxlAOgsA==","signatures":[{"sig":"MEUCIBGyt8EJNO9Mok914KBbI+NECBuofm9WOKaSh3GL7vo9AiEAryycIEAdM0hbzR86c7eHvPZlZXE1TCBHSyMmJgIcKuk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiQgVlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmouNRAAmkinkyw07DTCB3AeKBFBtsmtB/pbUWlM7OoYRlJgWhDgo1Uu\r\n0g8/l/9+0WFCs5pAQBXCBdGpXzqCMnEDOwX5RKIlSBm5ZHg4Nsjj2OUFxJOD\r\nc108lMuiQWD/S2vTMjuc8P/JW2yZ5vMeAf77GZEz5aMhqeCkxrD1LdzF+ZlE\r\nKsFxAc3RmIOeGrYfWxF7ec5maV6JjTvhwXsdzZtfgEiSSAqGtooQ7CzDsVQD\r\nrxbDtvIlgSl3P6k+jwHxQihDawRZhNW+F9s6B1CzV3H4UByz3ujaZ7dfVkZO\r\noOpv3S2nwjCvkuqhq9U9xLPYn+azn43dTtbgLuG/gOhXH8HBYqcRZhg6c+xh\r\ngChyk8gF/CUboZh16sNu0pFk9a80KElGcX51MY93uBmfwF/E4S9dmPcyfcKL\r\n6BtwuDDm2GM+HYFjP6z8Isw4JHnVPXqqPpFX3UNcrTaklQ6dMz3mzbXPyrHR\r\nOnL1bBIc10n/6WD33K1s37u8/C6BbUS8BUh8YaYXPfcYalCx16LW2cd2kfY9\r\nJXk97tRQaCOvyf4a0ihxadweoUuBahauwWyOvnrYpslBHkDaey9QMk+Ru8yB\r\n4QACtzXgHxfteS3e4j4vnwRSiKB9P8wB5KwUhXYurwKh1DBoDB4drpKaQIDU\r\nQlKsid7Wzj0XUxDY/Mi+ZUYdkv1Bc10FHuQ=\r\n=MyHY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.2002.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.58.2002","@fluidframework/protocol-definitions":"^0.1027.1000"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.27.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.2002_1648493925063_0.812066915259894","host":"s3://npm-registry-packages"}},"0.56.10":{"name":"@fluidframework/test-client-utils","version":"0.56.10","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.10","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"506adb7b1c75db6d74c6354ada1252b893ff5b38","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.10.tgz","fileCount":34,"integrity":"sha512-BhOlksnBa4bovwwR1xTbv0DLa9k07+2MSx9WyZOrOArmpmVesHsRI+dtqs2SlIEEiVQ/br8H/cytHz2Mp0/Lbw==","signatures":[{"sig":"MEUCIB1HCxEyCUdhNKKU1hlAKB+mFF1S7YugelgR6c4FE/njAiEAgaXJM7dtS37rHFvvURbjbM0lDhwWjsOiigJGI6oWZkk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20862,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiQjG2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmovJA/+PnRzPAR36WibaSfCx2DsAhSg6b36E9fCD8rAL1R0tq3YDKkF\r\nso68g42ruQ6aj8XveBCmTNZuEJYFl1TWMG8AFBOeJeU6AithDaVTY4LWHsdN\r\ntumna6xk5oD1g5Zn1AQ3NnfLZczeajOn69iB8KL1pOpLd52QDuuGbuAUFgLx\r\niiFPBdwZ6zYlDCyVbFagHfm/6EVRG9n+8hd4ffNXJvDX6BJJCmmYBcdsOjzN\r\n8JDgaX+V5RW2n13d7mhZD3rS0PoWuMEF+i6HHIwyhVgmMdqfrt/nWjKtHCpm\r\nGFT/46/ICG+FOkmwgo1qLkbVyjFC2kMb6XhgwIRSABjKLXi7dLE/9c4FqUxl\r\nf8pR38UwVGwJ10vWioOUpZWkwsiKxaOm5YlHLiBL+WJwKltgjeALZMZdxyrD\r\naJb52q2ZnyysWSMW3zgruR+fsU24HydzHD2AgKR16D6Xm00aF3Ix2e58ZwED\r\niS3q47t0SnevdEHfgxqwOqmbgmj1H/6/BiEOhatIMyyH0JyJNS7g0FlquIlH\r\nP2RsyJCDsC6UZv35iQvhYENiYgVws4xXy+NAChAGVrNeKtTm6/5L6Zk8b6LX\r\nkioaqnHNeSfkJ34e9cfSI5dLYp/zUiP14mPAAKyPsmTwHNMN8XWVrrilebYy\r\nJSZ70fvm8Nf6zEQ3Ztp53OVim2VwQUFX1Lk=\r\n=Ce2I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.10.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.10","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.10_1648505270060_0.14070549651762465","host":"s3://npm-registry-packages"}},"0.56.11":{"name":"@fluidframework/test-client-utils","version":"0.56.11","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.56.11","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fe3f21546e96efc976e4195ef8e0659368d748e2","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.56.11.tgz","fileCount":34,"integrity":"sha512-0liYNF8xlicLALVwk0zmeWeYSLa1FAeF32ouoJpRvHDEkro/xfr3S7u0BTWaWQhg8Ap38WwZP1RtN2WtSsIBmA==","signatures":[{"sig":"MEQCIGNr2NcTxwoSH3EJz087+JrkbT+nW1MUgpLboCO0sdqxAiAS8mWSGGNI1Px2bFU6jKyRbIr9wlT7vZbrUGknvG3M2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20862,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiQlHFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr3ZBAAmPC8VbaWB0tuddQQmUuC1SSaPhbEfGtE+mgNcINsLNycs+hM\r\nWVhRt91GFPB+aWGmslFtxGfBJ8bNuYwRte/evyod/cIz1Xkgoo2ytXmpKsJW\r\n8Vi67RMkhbC6G6jIWK4S4c9fOlYiQuP5p3lPge7rl+ft7ZvP+J2b08g5YwWy\r\nzg4lVucIkvgm23m2nJ4zaXQL7xh9/pkL4XvP745jcENm90p56UFwJ/64glAO\r\nrNNrDgoK52spJ/5HmKasJvhKALFxGBBRzQUFDV2Om9vTgnkUcQik1Ug7yl8Z\r\nlJChpmg6uZ35ADa6aTXLHD8vJEFR51HWW0rPyU+ew7lZ1hnDox4bAMefrjuV\r\nRN4DsxJZJjbAlz79s4sNnfjKPGD61lCYGyqZQqdaYIAjBs2e9Iw0EiX26PBf\r\nfBfju28iB0rm4xeyAPOXNyh0nn0kKiMn+NhWXqUI50D7X24ghMU/UJnFoxGz\r\nmZMAVJzrxbK5LZPbCnC8XFBawb8WJO2ojMTo+iGGmvtQvs1X+TMbQwXjg+E7\r\n60iQd1r+/C+YOdHajF86xzAXHIZqiumZ54F+maxT5KPgCiW5STP/FlxXqkcG\r\ncD1O39oH1+FXFD3OoAamoQoI4lSY8Tik6AIDN/YPsYnhPrMvOUUXcTQp+8BL\r\nsCOQeyyCyVs2AWVHhUAViQG76pBMtHJqQjM=\r\n=UjG8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.56.11.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"0.1.0","@fluidframework/test-runtime-utils":"^0.56.11","@fluidframework/protocol-definitions":"^0.1026.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.56.11_1648513476889_0.4654550472664918","host":"s3://npm-registry-packages"}},"0.58.3000-61081":{"name":"@fluidframework/test-client-utils","version":"0.58.3000-61081","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.58.3000-61081","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0ce4ca4b2eec7a6dd7099e380da037863aa5e2fe","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.58.3000-61081.tgz","fileCount":34,"integrity":"sha512-9Zw76fOuqeY3GDppUmvGZ5UYzGQR8ts7KHxTYjjIqIJr1BpLBU/yZtE6nDm3ShMNuwiJFsd2MjEF1RZpxf8p7g==","signatures":[{"sig":"MEUCIQCu3O9UJcf+iIHzrvtyHpSgpAdMDY8+EXzgqlm1Cz+QPgIgCF/zmut3Xo7wHmya4rPRvJIh0gaelTvqtoKis8nj4SU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVNxYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpdrA/9EV2lItJ4QRuLWpjGpYGXP3EkCrxalcZaflmxGU+ItWLHMGns\r\ngy5eMMXhgWKMLbpiI0THeNFkmO1MMrigzzVVh7qIsKvhMLXxEqzdGTodxyvV\r\nfLocac0Xlnm2Bbh3Ns1DiJS8Pdl12jPuPw4YY8hjBlLHyPFxoDZR4RKhkygs\r\njH4T35aNFJZOQAmd49kLQd1pMUHQaCm6FdoaW9xSBumvQjzdbegFyTJI2C4W\r\nZ9nnWK4Vs79eK1+9HWbk9WQPn9AJC5njepQPuf05PZ3Iegbv9bMQ8UYYMh54\r\n4hqAAhz6wm3VWCfqNFvub2jxxBpFQnMdrPXzq7rLIWPQ7vFhGxKtdmmUn6Yb\r\n2fVLHN6SXYvhPYUAYPBZzpYMKv1m546uDzqDYt/HTiTbt2qqQB0x5qy7z8jy\r\ncLXbtztX/+RbJlFHda2W9ocy6ScIkZ3eSjrgqJg+CHR9KqxZ1oseqnMex+le\r\nauBUl9PmKkpsVezF3l+C3OhSMaCn7+bso3pLOQC9U3L/atyi8Bgo4ylSfcWy\r\nnQOy1FeAyyCd3HBfpHhioK7jkBuv2VKklsJ+K+ETpoegwgHQLHwLH92T9Zpc\r\nPD8AxNDBEfL6MGzsTiqn1Z4otmILsjZxvBnKK7QNBk9tKUDW2ipq4PhRRy91\r\nkX2fvG4Wt7IYI6v6rXCUMTmjRAOJoorE4sw=\r\n=igl/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.58.3000-61081.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.58.3000-61081","@fluidframework/protocol-definitions":"^0.1027.1000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.58.3000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.27.2000-59622","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.58.2000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.58.3000-61081_1649728600602_0.7928756491232807","host":"s3://npm-registry-packages"}},"0.59.2000-61729":{"name":"@fluidframework/test-client-utils","version":"0.59.2000-61729","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.2000-61729","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f2060d0216af245e5d926904c9868d170aca7270","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.2000-61729.tgz","fileCount":34,"integrity":"sha512-Xi74+wavi+SRRvewkmcywwPiOL6YmtzodjsiIgcOENm+9//xBYyQXnTfGxnxazBQINEIzrxrr1q3NRl+GKAzgA==","signatures":[{"sig":"MEYCIQCyI3IcBGZbujFCBIXkFPgULvFFcSP4c0W5B88YTLm9+QIhAJks/JJU1G1dT0ogqhMCtuQBJQU5/iBuw+saTLAEUiPp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiWIbYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmprTw//WBYUvSNAQyaLKvLQaYa+Jk9XOjUzB9xWNB3gReh/OUO6irTx\r\n93sRP1jpPZEXYFxjBqcpFHfUWrDBs3GPvb4lxhv/1rCIIY68BPTQNtMKob5X\r\njotQO52cK+eC5QmtO8MSDiENb+TwEetCTpSv9qGikCeG3H6IFzvRBFXwZMFY\r\nYYrkqxw+Zwocp2RSppxa/ftqVJnZgzFoPFSXVzfKvnOkbYxSOxG8rPQqnOID\r\nuBaN3gv4YmbILINM19uMgsPzaiGrL9CBLdr6M/itRFIMpi1Zr30P0sbR/tN8\r\nn/YnSsd8iqBVlYBHlaxOP2TPxw64F9m6xA+Dp88LbsFdh+6JBsmOX/xfPNa4\r\niaZovh/2kifd+XD/rw88wPVOF24bfZDdzBNe8yGoB6GgSVtJpC0CAJ7yAxpM\r\nXb1HVQTKvCc2fYaU0YAZ7Z/sICP5Rf7M3c8B95FFNbmuqkunlXL3ABUldw5g\r\nHa8eNC4SC/7lEC0YCdXYqrtKpzz51pGKF3MdIWUSehvKXDdgqVJ34GNJqut1\r\nxu13F7X6L53J+PlpPV9VQrQNwoHPg+uWJgRjIKGYpHUgsm31DOkIq3UTqkr2\r\nJ6/BbQqfVzQhexmLerAC7B9p8DbfBs1k8EvaZ9BKSKAz8o4eetaNcxCXA4Gd\r\nwbp/yao3GVPrtC0ZE1gsp37/FQwAOgUnjUU=\r\n=wIMk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.2000-61729.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.2000-61729","@fluidframework/protocol-definitions":"^0.1028.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.1000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000-61189","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.58.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.2000-61729_1649968856096_0.0380316086294874","host":"s3://npm-registry-packages"}},"0.59.1000-61898":{"name":"@fluidframework/test-client-utils","version":"0.59.1000-61898","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.1000-61898","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"733228f6ac5e028d0e93f99c54725434a2bebf68","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.1000-61898.tgz","fileCount":34,"integrity":"sha512-XxdhSpr6Mtc40rsHgNhPljTDSaNlDvtwbx/1sJ4Rz9bUkLpq+FlGkpBQjuUAJ/dy9uz/lfse6eXGz4P43jPXRA==","signatures":[{"sig":"MEYCIQDnsOB/G2W/XDsR4ytCV9wYFiWgKzn1mVTf6k5+OLBggAIhAOGygdMu7p16RsoOe93Veu01NpgHpTfsh0BWBLaV9Otp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiWf0/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoptA/7B/wCRfELIlHNYU1waRTeDsEYGfUyevlHCJOzJ+/0f6ATwMMp\r\nsHNzzpXzANMll+BbrXUGDUeGy+yu14v/r20RHKtJzqMdO4xgbWeo5aYyMLEB\r\n7C8184DJs9Y8lnCR3Px3RQrwxeoeTrYIQk8Xqc8VMwUW+PMLhmG9r3A8rtK5\r\n60+b/fWK7sCVyp91Fi+t5vW+zfSlM5Pgn64VR+/WlVZQnHiZ3l6J4dWIWZeC\r\n+SSS8WvJVIRBgtdyIt30NlDRiPZH4ggRb7nF9BuckeGztEg1qrewwe1Xuszl\r\na1NzftNwFBg0jjWXJ8v3fpEGYxLNtag2gpEfOp0hFZ0akZVX+t5cwK09WICw\r\n06o0rkXKP4phGh8+uYuDgE580bKwXMB21iqfpnqz0Bk2NJ7lq4S7rpG7/vA3\r\nSByxJKdrsG/kKcUv3t1TFEGu4DM1IV8COFXslH3oUaaEthoAlf8pSbq52TAj\r\nXnDkBzSKawUMV0Xwmskhe38K+CEJpSm+Whxji1RuInDkUgxMa+cy0A4V17+6\r\nOtZgFJGNJoYpEvMXKYv3Bcs06IjXtbZDdO5cxmqxqFGrA4a9o9Lt6dwVpFHa\r\niV3YuwEaQQd5YiPBxsFm22PMUy1ZGdduPCP7Wl5GHEvyVlcMBEgC44p7YU5C\r\n0Z2GL9ufykpBNicDjDEOUZqKZkBrecaOrTc=\r\n=XhBD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.1000-61898.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.1000-61898","@fluidframework/protocol-definitions":"^0.1028.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.1000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000-61189","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.58.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.1000-61898_1650064703291_0.6849961950120145","host":"s3://npm-registry-packages"}},"0.59.1000":{"name":"@fluidframework/test-client-utils","version":"0.59.1000","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.1000","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"82280fcac548395034ab2eaeb3ce79c4f5228c06","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.1000.tgz","fileCount":34,"integrity":"sha512-91mlZ21hkUY/l8DqkXNYGLd0fjya0JWiB3hePPJIWy6oKfqHNKPTau61TgJNtKYP0is+LFf/KEMx0KtsMTAjww==","signatures":[{"sig":"MEUCIFFUKcV0vM4Y5hfFK1OCVhLY+hk+oWGHDrwTAiFr/FQrAiEA0UK5eKQ5Mo7Yo1HontTTpxuZVQ6UYwYZ/49tq+RzQRc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiWnIHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpjdxAAkgI4RXaTYzbkZRrNX4iiqoDOF2Y9MciwSqQP3FmcfKxhzrVY\r\n/4cxhDpBUqNB9SItTfwK02Vblp6EPuC2n7EendLJNl1mahF8l+S8jjDqWCwR\r\njDmzQMfWcYsZsEgtiQIwzf9hdoXeLmPbKCELeSOdlrsbc2UfkjmeZcrtuL4V\r\nj0Qa7U5IOayVrFM6bXI9ligj0Huiet3mggOq0+GPumml5TboThzPxL4o3FqD\r\nR8xV2fAw3NxApc/cAm/ilqvyH3A+dhqJyAP5jNlWBWHbGZIuzlOABGLAwjFp\r\n2NIsCQfVzXo8vn5qUiw1b0iEL1k5UODEV6G1nuXv3SW0vynTqvBI4/rmkKPp\r\nDw1/uCuDypczZJBNtNeEpCklDLe7V6ypjhr8g/9/iGqt8H79f0HTiVrdX/RA\r\nhSOzPLCJjyn91N7uqzTqXzgPIxrUowFPsm9AEWuf1YGDVFQ7yslFmFjjKbo7\r\nmUGMKEKq9Ig+CWpEy+xAYg2QU18HsnufRp4zKFpeBSX7DM4ZRCo6RMCYwnmy\r\n3iMdGtbIoyW5QRYvmmoVB7nzb0a5gvvcsCyoepjTw1INgIrDzO+kJf0Lwa4m\r\nzLRnQFCkouen4g+FRUP2crwS7SIjSZgdZeW1XafLv6jKdRBZWcNd+ctVtoVB\r\nReNLkuZxUiGs/xiWG+ifhsoCDvWvSBU7/Xc=\r\n=8iTa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.1000.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.1000","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.1000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.58.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.1000_1650094599397_0.7831461203956036","host":"s3://npm-registry-packages"}},"0.59.1001-62246":{"name":"@fluidframework/test-client-utils","version":"0.59.1001-62246","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.1001-62246","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e3d7ec742b580c21c9ba35a2032da3618f356af6","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.1001-62246.tgz","fileCount":34,"integrity":"sha512-vTnBghEXS8WwhLk40lnm/pl5pCtpUOeCDpO8enDdppctnjLcE21rFyCPilXzxfwrjS3SNkgkmLNN5bYMKvKobg==","signatures":[{"sig":"MEUCIQC8gsoYFyrzuAnzqAaoAPTDXKu7iYVcZ18d0GB8JRWMJgIgdgN8ddcFRezf63izxXto8Rm/KpvBdBhXcFUkx1xE0rA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiXbf1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrP+RAAgd6y3mxqWkgiD28WxD4uw8Ad6G5DZI+V82rKYdAEtEKtdUkM\r\nsTyuBRM9NB7AzqUQPeDS3ZJKjqfVTwlGLLNTE5mlPQ9MHFbCgHQOm+QmeFag\r\nKU/dBKorGVabkRsU1C7/gbWk04WHy2p2KeYpAKLT82sr9K0xF1w31up+p7/M\r\nGiNfx/pxqesGWzDUlpNlDHjYEw43isop5dCrWU6GQEi70noZMDJM1PdYQYwH\r\nxgFngbp2vu0nxcvJiRjSvT5F1im4Mm5ObBgV6cPFz8lBRG5YmSU7GhlvK2ho\r\nycMdkccV7XWXaZbNZrlE7MS/V56kjvIpG4zPVJ/DvhFBzSBdRcuVng9M4p1v\r\nUu/3I0pSp0j/N/4sGaeoo6lyCSzqeePVZPsaJFi4RGRKTNPJIX0nHlymovYR\r\ndfJRCEQqAzfgyU/yYUHCV6Ot2Sz40M5wQrf7FrFEQRD1NJ2nhciYstfNGnyx\r\ny4f55XdLFR8TbRtvR7lzDP2sj2wbBAuHQjzds2e9l4EOMmGtkpdwVM0gvvls\r\nKMYxF12XlvaNUYDpvHVcq1gO9SabX04mi6QQ61nf2Jl3Pr+bd0vz2wMfvxpw\r\n04qjZhLVq5Flr3AuxZ9IrOHcM4HfsuM+vGNE+Xs/FCvG6ox/7wZ9YDgtNpNo\r\nbsegtB8rTxh55tdEMeLheaOLg3HSQ8CyrIM=\r\n=pUDq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.1001-62246.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.1001-62246","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.1000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.58.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.1001-62246_1650309109202_0.8965024183012817","host":"s3://npm-registry-packages"}},"0.59.2000-63294":{"name":"@fluidframework/test-client-utils","version":"0.59.2000-63294","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.2000-63294","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2aaa81d6bc5f1bc833d665fa198923da3dc3352b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.2000-63294.tgz","fileCount":34,"integrity":"sha512-gGQ5eiZoypl9PM9wFiw50WoXK2i8KtRVUn8zUt3klhckXcQR1v/rAsM28vS5CCqGvQ2D6WaeZJzVUCHkeHVu+g==","signatures":[{"sig":"MEUCIGo/8/WZiAdSgMf/IffElazQjw0n5O7qUKlidURnVHAgAiEAtjTJ7OjexAwoRXAHl0zLOd6nsBhq+yhoFY7b0BQBFcU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiYxpLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqoGw//dw9VLd+gcScrzgc1F1YjoDHAgli38y8JLyAsd6eu8hWpYS0C\r\nInLQb1k5a2Q1Hs20haLbJUQhBv6gluhBgvjavW9moYUjVQsxJl3a0E21PJMy\r\nthQXMpcy1YRkIkTytaHgrDaTTvPvVkb0ivkc+dy5rynxLBCIDtwyNJJbuVvO\r\nZqoirPJq3hAwDK6ZzgSg+VrySE/nJXtNa/GG3odjbMMGwjzyAtLtjk0DE2MI\r\n06bOodLFs6JTzzADD7ye7tCImHQblwntq6h8Rl3g2vH2/jKRNrI5x/EIulVM\r\nB2ckX4Ov4yXcQqMbf5MKLCJzi4DTLb9wh4HrxrFXPHP9eveSJK9wsuYP+TaD\r\ne9+PeuLfzRKhral1oQTPNY6/5cp9fX/oN68Nm5t0c4B4eKCk99MKgdrYPFUP\r\njRqCNfvDrvGuovNmKw8rh57P/hEpQh8xObWFQCQktPtiqoxNBFGTDN+rhvqC\r\n51vIU230GjiLSkLM+C1rdFrpotMVQW4vjkfIHyeSr8Mto7EEysgyCw+96gMl\r\nbFv/9Rc2Xr2LDnaUljJ8Kr/to7yTqgk49G+gx6RfCkth+wU+oTSuZjIcvJ0X\r\nIJ/PPA36fB0gJlgVKHeCAEoYFzxu7Y6ZJz8SK0YEY6UoD8NxThYpmZGsiKYI\r\npZCbebwlheEoqzGrx1gzkBqRVsCZuFXyVis=\r\n=zdQ7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.2000-63294.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.2000-63294","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.2000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.1000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.2000-63294_1650661963119_0.22780507011097906","host":"s3://npm-registry-packages"}},"0.59.2000":{"name":"@fluidframework/test-client-utils","version":"0.59.2000","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.2000","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e5b2bbe59d314ed23e98d9c1bfb3ee36a5a987dc","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.2000.tgz","fileCount":34,"integrity":"sha512-wKPYxJI1sHhsVzttkhHe68Rj9X47cCHH4+JhWLLd2RXgD5MZ8gWS5fLif6uquSvmwaTeReU/hyBs+1601HWCfA==","signatures":[{"sig":"MEYCIQD8aAIstklHuBftwltBcs0Ph4LyrlBO2Pvrx7nXw+oVHgIhAP1HkByatxol5rk5WhhednP2bg4gXac3GOrVu9gLxVzu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiabdXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYYBAAiblfbHToTZgFF7f/6/hbHFEDCo4c4jS0RyoVvCxRkw3qyNtG\r\nm5DDg+UQ6lXyQ5hP/BytQOb/V6pgPZEJ8oprE7QACZXzjfJQ0BNfwRFsPaUK\r\nR91nouP+ywbcnARYqH6HX+J/lQEFLT1GlyeykRrd/BQ0QwFV1j2f58v6rsdJ\r\nwfoSQ5gOQwRqxI0rxmlZWKDbkEWxXJHOjGAOpnOYXhqK7d5709KGN3bfAdLW\r\n7FyfcGIeKTW3mySp7Dgu6ePH55AvmcJuxfLlP3XPoXCa5ffzUYQGDOtcY1w2\r\n3S2VVlqpESQjkqPJF+aMq6zl+3QTA1BPNupx0GLN+4CPFPpWdpEGwrBw7TSO\r\n0a2T1mg9rZtGQQPgdQ/wsRqMd+QQC+S6A+Zy56pMtldefk3mNBYvjikellXu\r\nLxhtKJ3mXHe1OVxBsnMVabBlBJIy/BAlCfgahG8nTs/+TD/g1DrzZpjo1wkk\r\nDqdmobZOO0NBRS6KHjUgYLeqZbkFSn5IW4bFFWFm94tPy8BsGF38DltTo97P\r\n4YWNdq7sGBqkNxb4lJW8tUJAN3nGwYHLI9i/PrpI9IM7kWX/pTZuxdgLRK1X\r\nprQThKdzyz2XwOt3P4718zu5AB8oRgMD6X1CCLyk7Gij0A3XPvNdF4nTj5xb\r\nW1L8scAAgIAIsmvIGIlSi4i4WrdK/vm79Ww=\r\n=43Op\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.2000.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.2000","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.2000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.1000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.2000_1651095383237_0.30324584019855805","host":"s3://npm-registry-packages"}},"0.59.2001":{"name":"@fluidframework/test-client-utils","version":"0.59.2001","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.2001","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fbc06434b9ee2169e3f89bb72cf968f6e76a6611","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.2001.tgz","fileCount":34,"integrity":"sha512-oMaMne6VUgCzAOV+sPQlhZjmGFjI3xuYxmiiB7hR1MNvv8WqidArYlE+wM2tXkDqgdNhLWCfr7VcdlEZbO4KxQ==","signatures":[{"sig":"MEYCIQCj/tBPan3Ve1B6jnve6w5INPxhOukmeCgk0qX2bG+bFwIhANAwKQ9HhHDVB52vfxLUu4n3ot4+ptOP+vbyrXr/CMSJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJicaE4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpo2RAAnjmloKUTlY69QaFaFdQ4B6jF035et/2rdw1iT5cV3Jt1oWCI\r\nnX/UvKet8CeQN6dT/L7GdMH0EIi5lniu8Q2pu0EYdqTYJZaCzXK98m91Z+Ai\r\n4d+3FEMU3p3Rtqy4I0xrMr4ReIqZxnSGD8kOmr0vngwPSOND52WABpQIwekq\r\nIj/ppiOTM/GW3bKm0d8bOeYaaEHjdxEoxdbjOvd12Vb7mz18OgZV/dDq87pH\r\nElXheu/yQnAuOCGMErMQZa7fC4H/eKNWrDSj6iC4fb7A79lqtagPwOTLJZtj\r\nPXBRZo4ozCz+Ftv8iLR3lbeNoY5gswwglpIFwFQbkM0YQtMzXf1MCbxyhmSF\r\nSwJA3ct0D//+qVNQQANF/hILatAjwzQheEn5flNih62t1ha8yE5Q02Wn8GD4\r\n008eEs4gO9PAnNgIM2itvwQcKSYkW2OVOLt0WMuFvxVx2a8FqXLxd012bQVV\r\nMkfYZHJpbmYZ4p6r1VwOUA3dWuHHTMtf6Y8v0qqR3aYYpGGEP/9YX+JrxDwS\r\nPlJ5Wwt1zCJH7Xt4FMK0zWNqRQENEzkiJUo+2lLHpGiBSJh5vFPhuUtrLZ6R\r\nzlcGUTQnLl8vYGOCOmy1lYW/NWCW60K/AuTKhZl2w1ddQyBo5mWj67EspU78\r\n4O93EC8H+hkcmt64kI7a4l6CtYnL/x6KxOs=\r\n=QquY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.2001.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.16","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.2001","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.2000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.1000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.2001_1651614008685_0.16801923967709054","host":"s3://npm-registry-packages"}},"0.59.3000-66610":{"name":"@fluidframework/test-client-utils","version":"0.59.3000-66610","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.3000-66610","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"db5cf90f7d7750fe1373aad3d4516189fa47b958","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.3000-66610.tgz","fileCount":34,"integrity":"sha512-SCXHUrrO3lckt5OlDK3SwE2rl/OuC+4TITzYVoILxtACV7QU14VRx7SgpxdvPPoKRmJ2HRzqpR4yS8bhxnRNxw==","signatures":[{"sig":"MEQCIHD63dbi2rLIdplbxDMjmoox/s56d39fOmMKtU51YPn4AiAZOXATUgBIiLIEbxfHYhUvMNzNyPxnsDrvaTpqNIe25A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJifnpNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr38w//TBjYZRVj+wV9bt3a254jLC16zcCE3pkTj9scH451hbWfpjcL\r\nYlGQGTkLexm1cL+HNaIQvhDAXLxIIZG/+VDvruvk0LDFY1i9qPg8GypiarNv\r\nrybongsOdhZo5Ov9gvpqXVF2uzkvH79+QEwX7ZYhhPbG5GhPZJ24UD+VPVy3\r\naaKsZtqsDSt7c1W8IjXO0tGw/j5ioQCJAqxjdT97XYGPYeaensmMqgSpA8h3\r\nFGTarBRriVyJhpUxjm59L/XDQ8y5WeyYscKcD/i2/TPM92hrc1sEuJU3FJPM\r\nxHmu0qrzeff4Nsvqdr200QXrYC52Qj0QmWGuqPYr51TmQh/ylx2GUX933wV9\r\nlRZTg9cWDs+G1igqIlb8cxca3DcU2ybyO3gqcoS4UUkeKjnPugacfiIVUDPo\r\nj81qCv4PT8I04NxOdRdSJc4eHg+z6+AMFn7dmbRH/RILvExurdNf3htzHhCI\r\nBonUX28/eyNsMNcRJzhTkQHTHZs0sqQ7X4Lv7AZklRlwFiBQhcfdDFJ3Hhcm\r\nXGKkN4UnQ08nStDCUPDlZKBRScyzmMzEp4o95a/S04J0TF39osDnzRsBB51o\r\nJR4OrM24xBWoxE7JYtBr2tlKw5qJwnsdUZ9HsUB6yeGwFrpK5ux/i7817eUq\r\na+IzvhQjHKx3SEgrwySCLwcp7y3gCZLCn84=\r\n=nX63\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.3000-66610.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.3000-66610","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.3000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.66048","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000-0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.2000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.3000-66610_1652456013253_0.6779226017267381","host":"s3://npm-registry-packages"}},"0.59.3000-67119":{"name":"@fluidframework/test-client-utils","version":"0.59.3000-67119","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.3000-67119","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"74c8322469dcb4a70fec9c12b8542e38d421fc16","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.3000-67119.tgz","fileCount":34,"integrity":"sha512-bmz2OHF7bZpigegBcNP65VWOqxEMVMajm9Jpm7ERaeDm4vrJxdJz1TQYb+ix70nhtsRnZ/zYs2DcfmAQG3RP6w==","signatures":[{"sig":"MEQCIHU1fTomI1g2Q0bryqVlgS2DsR+EwhXllc5Gt5XUqOB5AiBM2ux9uJxucNg2ecUsfCGqNG07oGz4dpTYY+v/VviuJw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJig9deACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmodLQ/+IhbfEGcmLSJXxHa8OM3IAtN6ZpEOXFVbGpqIJR7dfK7wBigF\r\nugS9/Rdx2rpAm0MWPpP02UNuZcusdg4E9HW3j7KzBZYLieQT+2zgufrM4Igz\r\nz1FBm6SFwUCT2lybkqTtrIAnbXpbAtjvg3Jz0BY/TCpcbMszqb/VnVgPt5z/\r\nfRv0BU1QqTL7g3lzT2NnOq3AE6dzPI9J8tllZypYyXYDeLKeCaSIOesXR2jr\r\noBmpj2jCXfkVDboUb3PGzDtaAYY6TSdKbonqzjzMnSDdT/kAbS8F5UQVLStT\r\naSALjIVnlTPwI5ux9Y7aVX/d8ZRdYVqR3m9IrCq/BCBeEf3Vpi01DenTBAHt\r\nZ36nIQlJ0I1w4vI/2EJWnNtiaYVexE9KgHRa0svvoVYvtBlw9T1orwlhhm/H\r\n9sqI6+9s1EnVdSrJSQTwyjG7QNulGg4e7dD5ShKeYc7IJYrWZU10IdLsNqyZ\r\neff9PcGdk5pxODUk2lpHRa6JQ8MW4BhmpklZB74QxFYJPTvSXIDFVYLauNON\r\nd4aQXJJlfLPNg+xXtG4/CDB5op4vNEeLDkI7UiE6UWDEFziEZakuQjF6Lsr+\r\nluyyIwjV6Jdv0imW1QQMM5JaDRCnB2s8c6NKo0FNOF6z5fxwzsdbfbxv7Jl5\r\nUVfg9/OynPjodTGpAhhxIVCNkTItL3BMdRc=\r\n=WQy8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.3000-67119.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.3000-67119","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.3000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.66793","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000-0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.2000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.3000-67119_1652807518082_0.2909926966451588","host":"s3://npm-registry-packages"}},"0.59.3000":{"name":"@fluidframework/test-client-utils","version":"0.59.3000","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.3000","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2a32116aa1654b7844ff3dcecc9e0294801307d8","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.3000.tgz","fileCount":34,"integrity":"sha512-B0mDfqzlWBJ/j2Sx9ABhvftb+mZU0/fy4D8ToJNkjsYciE6knAHf9inkcQb4FnCxBwA7oTDbWW1k7YPtN6KaFg==","signatures":[{"sig":"MEQCIDrGM4nm0WuoTlh3tvpG7CNMizKHYcsxLLuexUesxS7dAiAaNrbmbnr74xpo8zb+N3MSZIwy3llkVjSKd6qSizFO0w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJihTERACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo4Zw/9HZpm4rFvI81XGtH9+1+ms8SHe2a7yWpZCNFas0L1KHBSd5Wa\r\ne4gRtAHUusfY05NwEjNOOEEeIx4G+VokuC3tbtxKGtznkrEU5h2F+V0O2JmC\r\nB9aANWzwTW2YfpaGk4fKPw/KFZ8TVtiyIhzR6pPInNfIdDTzH71KVaf7aucs\r\nz+I/ZW5qe+KaSXM8HRxgAahJkUjVNC+erhdidQzhTI1fSb1PJQSreivDi7lm\r\n7qfqiLO+oeEXiS8oQMTuNSESqxV+5+uKDanoFfqh5NHhBqvW+7oKg8pgXAcA\r\nZgA9KgGBVBRofYOkeTts/mjZfDSdEOkJrevz04ZClHlXA7V0rDO5lFq9oA9v\r\n/7R48kcc+lFWDLP6cM0J4Oa3988p77xmMDKCxAYxOjDtRGmrDq+OeL3cY9fL\r\naxnACQvALSZ9V/pAv8WAWZFPMDfpPcyKrMP3JX8VEuMVi+8tDQW8utcZcmyk\r\n3e+5Vq8KCn3g3y0Vy6DpQoh/O3xEUoD9Ria+NMnkSKQS2+q/XCfc3ka3DiKI\r\nXHQx8D/W6DryCh8lmiu154TqSmLGai5nQ0e/6+82UOaMktQP7IfSMk/TPFyb\r\n18IYhm6ViVwLSBA3OEXx2DUBVmCQBO/A8S1OZKc1yN/i7JR4NaFTe4OVBquT\r\nf1ksetdfTIXiwrp1Eo8Ukw+2T8HGoFRsQI0=\r\n=IcpI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.3000.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.3000","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.3000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.66793","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.2000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.3000_1652896017340_0.1598673686913168","host":"s3://npm-registry-packages"}},"0.59.1001":{"name":"@fluidframework/test-client-utils","version":"0.59.1001","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.1001","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"05c25ee362e35bd32df2bce8af3a2296dd16c02c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.1001.tgz","fileCount":34,"integrity":"sha512-51acSd3WXfafJETjC3AoOmiXklKe80fhSPNZBCvTFH4ZF7CN3ZGeANP9WvdkzUVSaPUgA4XuMQqeqbO2xWm5Hw==","signatures":[{"sig":"MEUCIQD8Az9ipY+4H2DPrLRARoraLqFvjHYfu7S3z1uVd28F9gIgNKjRLb00E3W4gSHuDadJdT/Cgz+MClgDZTTdTYAsWU4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJihqw4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq3Dg/+OgKOjeYSVb6EsCm86r2LounCXyaVvGQuIVUOObTYEh+n+teG\r\nVPHyWjpHoEt4fusdtJV5+wAL2Vm6IxG7v9/HBR+etkTp8uHtt4K2KA1yoHw/\r\nwIJIVFVOwdZfb8syy+Fs9AX+3WJCVK8+6MbSK/wxnqNultdV2EjvsdVyaxQV\r\nXwoH3Cf66gcU/3RviRnO8MRwvBmtTyE84sAQL9WqgEofzXDnYLpizx8QD0mR\r\nBsYzVQR6VOJ2fGsXQWt+w8qCk4l3GS1uC+uaWV/kQb0f/y5fdXLlGekbsWoK\r\nh4BV36WsHK0T7ktIvybMjToNBwVyNdCV0S+p9ejTuGXMNxanyZzGkX2V4Vgt\r\nEeDXGgkrM5HrwhXmXS36xXokbw1ACl0hac4waYXTmCVUtfBBAWaL1diE+kK0\r\nwF8LyDXVgOAOmUxzBeKa1lj45MMIlz3nrIe3bzpsgQ1QRo0XO0Dhb5V4CXP/\r\nElx7wPMrsb4klQ/7qHos9hSdKZVzkc6gSubT7jIIikfO+HzyEmu7YAIIgdrr\r\nI6kXBNLfQ438nOJNXpvk8GLhM5CMxJh4WhzvRY6XKeyvRZEQpgiI0JUtAJjz\r\ntVBRbrI9Kpp0Curdl10Rm/JJXnlCd3b11WTiQeXmbJrAUJAi1qFZHmxU5wkr\r\n7/iW2sLnsTON4sIvRXrBq12K2klAx23E/sQ=\r\n=Qb3f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.1001.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","build:commonjs":"npm run tsc && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.1001","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.1000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-react":"~7.28.0","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-no-null":"~1.0.2","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.16.1","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.58.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.1001_1652993080408_0.025443552439081252","host":"s3://npm-registry-packages"}},"0.59.2002":{"name":"@fluidframework/test-client-utils","version":"0.59.2002","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.2002","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f0fcaadd659f6f6a6e8bff9bdbe0a4034a246260","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.2002.tgz","fileCount":34,"integrity":"sha512-yokaVnJLJ/nKblCvu4V7bdb0KBk9IECDE5yjxHbD/ZJMDWaOPir4PkOMFKW2LXOry+KQcGeYkEcu7/AyWpDZJA==","signatures":[{"sig":"MEUCIAlbtyY0wJiLjkuPjlKfwd9c7PS210ZAVWQuMQtZlRGbAiEAzfJZHnV4ajjjOR0lvmsr/8v7JxC5G3C6ElnvekhPMJY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJihslDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLew//Y8n/AfDu6kBMnTuyRFw7ASKAvbR6TNCbD7jeiaAAaJLBHCUX\r\nRH8z1wy2vPdC74wClQPPQxJ+EXeHWjpJA/4QE96EwaF94cbrM5a1K94oBP5u\r\nLFawU4S3fvUIiekKCFCYmaC/iBphCWY1cyB9zbpTO3+6BlXl9vqM6uA3lR4W\r\nZcY/v0G9apQBMT5o17ZGdAIduh9G/PQ1Ab9weF8fUU6sDDtAIWVFOAkvz81w\r\nOD9s5x2hhXJFA0n5FAGH4x2Xyysdi8Wf/qIIb4Rm5TUG1RtyeZxYvaSiGn/O\r\nCJzud6VoFyrbRddaLZB14APuuYwW4u3NeCArWbtNw1qDHy7eTUmrEdB5sd4r\r\nid6LxinnjQunrT1lKl/9ANlVQCmfAksOeSG0FlAJsSgGHLEEeY7B08xb8Ikl\r\nISYDBK4Ywjd3udQzkDS2yshAbPUxgTPGcaiN8Kn+TNA+SuCZNwlsFmVbAuyL\r\nCliMcHQiypEmkQDlFEPilMqYgLrq+SMugPVml/OntsKAmXTxPMbAMe4Wiw6G\r\n1BQYZeLBF+kNIeihoSoA7v7rk/ys/8o9qxiVBpX4wxVPlEb92/jQ9GLZNBhH\r\nFyKaeKqmOvq3ucKBQnXtWliwS/5BBN7WFyF+PvSEduFXcDBPyi/Kn+YfDsvZ\r\nQk8crSnYYHx9Wzh/Oat8bKhz+CA4e52bBwQ=\r\n=DzhQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.2002.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.2002","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.2000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.1000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.2002_1653000515251_0.8429199258751845","host":"s3://npm-registry-packages"}},"0.59.2003":{"name":"@fluidframework/test-client-utils","version":"0.59.2003","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.2003","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"45480655b765e1ef5ab5d9133792a5e1596e72c1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.2003.tgz","fileCount":34,"integrity":"sha512-KDp8c8i7t0Lgu18e2ooIR1qJSxIlVKW4tbDkqZkXKa3u+DTUdyWl/C5eBdIXMbzwyw4WJ1Ex9Uz6dUFxkAxc7Q==","signatures":[{"sig":"MEQCICaYDRCTI3XAkQKPXjb88Bs5U/raYoQ2beTaiq/HmU05AiBtHYbuFIBQXlbOAIdxemyZ3mBNrC5IPpmBLg4EoMHbmQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijpO8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmptpw/5AL7SeYMGSDhSlKvUHkylLnpGfxkXGej4B4gdDjE1/ONX5Jv8\r\n/s76SKon4ZPZo32DO6E1zMbk7jMfjNr9x7CWlXveXFW6KXOrAeVHs/CKFVpd\r\nZaRB7bIp/csamVgQFm51qkeLGwVxp9gb1prMr3qJ9vPKoL/5dOSNqmm/K6aG\r\ndwbEzYDnU1OsYOOLP+mb3ikYorbirpVquRPHvwrarG0SM2T7jIb191UQBaa6\r\nxcAiZKfMlsTORvpBZ1ST3SuC8flc9XI7cwCaMGkpT+WakSF/sg1iIy77EW2b\r\nLps9TvPPvdstzhuETvmkOB9qzAH3CQzlXtRWGaXxtKMaQYss7cCoHgUCdfSX\r\nrCjojHUu5olOuzDJ7K1ykWrGFwf0riD8CcdTaM4dZjTwL3gDBZ5FRQCMLt3a\r\n7/YJQ/cBGHg+8K1ifaKcQ2B54wAW6gU/5PmfoFetl9pUg4QJ1EAzBYDXamx/\r\nosvkOP28KKof7ik5be9U7mz4DTP3GSImaqjSN4rd4DmNpzkCNo+vWXYe9+Rv\r\nrgusN353ieMr6x9e+BMcV1CPnXfrTSZhTtGtRt3im66MfKhi3VlIeSInUhcW\r\nwM8wxn21Jm/cce3LjOdgDvSlsp2dnLcUtwglX8mWgEquHyMelbRm2xQE2K2a\r\nqZCzUFD1RW4Wi2wzlV8zDdYC9FnIAPelanE=\r\n=bhBu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.2003.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.2003","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.2000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.1000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.2003_1653511100681_0.23558983235695985","host":"s3://npm-registry-packages"}},"0.59.3001":{"name":"@fluidframework/test-client-utils","version":"0.59.3001","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.3001","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fdd439703acabc31267c71cdcafb6fd15732fd4d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.3001.tgz","fileCount":34,"integrity":"sha512-OPv6gH9o7DahsB00HJkIXG67BbgdIVSrLL1n0y8H5yQrUQ1tz6K+okuCDZx355L+sPqzK8iQLAg6h+yRjzjATA==","signatures":[{"sig":"MEQCIERFBu3Nwj/IV7thCIPNtjVgcW85nlhutWzXvaK4X2V6AiBZHW1hStmcWpXGem72CnegbTf3sIA9Zk4DqtLXM0Gxlw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijpZvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoCZA//diWbug7fgtR801GFiRZ5fQAqxgVfg1iUC9ourvDL870Wr+nL\r\n/qMBvlihQFOg2aFKeGRpV0IokDUboQLst7CPywXAVrVejHAhlpmjLqeFZ4cl\r\nimJM6bIwG0PVUHMdMkBtPSyEg3smVIQPEa8GfbkcsiHwiEh3dTlqPjx+Mr3i\r\nL+GRtKr8pwYQcndtbY7wfc3xK6Ye5BtEbbIYIsw15zhosdcwGbvUMOp9w34b\r\n6p7sGIXFP6uz9AkegO05MTzFDNLv+DcAAggB+BUJ397ExTiyPuVMZ70kkLd/\r\nU2Oxhp/JXB7RttCuRTaGgF3G6EOCXEslbKtge2zsprAyr/Iq4iL9ADknDsJO\r\ntuEOrCqOW4l5vveXVf/pqFc97UAHp4dQZ5OVUo6bIkj9dt1V/HrxH8h868Qg\r\n9Rwk7ZKZI9eCmRYkLThCxAm2BthdL7efwnu+rJdvGlcx8P6A6hJ+8E0WsQNS\r\n4XdRxMPuiNxBuvqYXCd+IgcHc5U8h3OgSiyxlHHLLD9GzxqBbHPHZpfMTyfJ\r\nsst95TC4CLbZRPn3oWqNrSiywqigxid7ZUGl4dxemBSnwFWp79N2igOnPBfB\r\nvu0+bBarzdaDi1J1Zf/W38eT6kMnU/5lYK2+wiXu1NMFN46UNYZ7S72Y2GUM\r\nYU8H1FQka6wJRPdeabu7jS4z7czx/3uc9/A=\r\n=/3Wu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.3001.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.3001","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.3001"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.66793","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.3000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.3001_1653511790868_0.7723126949915509","host":"s3://npm-registry-packages"}},"0.59.3002":{"name":"@fluidframework/test-client-utils","version":"0.59.3002","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.3002","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"aa35b1694532927590d3dae3311ea7d87016001b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.3002.tgz","fileCount":34,"integrity":"sha512-gMM/PVtNi9DTCZH0M+evvQHQ7Ir6Zm+YWo5wd0c+BuXatzh+qlvMoEEmtrchNuqXjEIiCXK5UhJcyX/ZfbWUlQ==","signatures":[{"sig":"MEYCIQCbvmdb4rYdoZ//S0zfL7quXJdnwEmL+6bozfkn5pxymwIhAIyELX4kd90da7DPlUd03Frwgz4czJ/hpIc309zhRtvn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJij7mAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqwHQ//cfCZDghrHz3zKy3XDhFWb9aEx9tNQWoy5ofBOReCW/YueFB/\r\nKzA+CEGZcGrtshIVSWSLM9UfmTkNfT46IUqI8ukBfmapxj82W+/BM9G/4Vbq\r\nHpb7Pi8mTn5gcrmFGEJPI+Eq98wGgTrQQPtTtzBqKnPugmib6vONbE3LI0Rr\r\nL9EGcBjdDExFoSxrnT6B9SVb71QnxwFEa0R42i/bJ34ZYlXADo5Ybxi1/CsK\r\nbI7Kj0QoR8182gDacwTOz4vrBHSmdrID2O3WzD1UVaP5ymLRzdynoz9XgDTt\r\nm1lcCMyZDwBLwO3WTydPyNJbmZhp3D25tukg/isbCcmnZ46JDNdVKL1l7f1o\r\nvYjZEi+XFfqVk5SnbW3zW3WINyzCLrmYhiEv9USbZMe7683ZiK1CwfyDse+r\r\nWcphZGJg1tawS8WsISnmtJ4mHkwTct7Vj2eX/cXtbGskuP9HXymzDhF3HDs4\r\nDzq8yD8RUDbIc2S+iS3BI9EZ6S4U8NJn4SN1wdN1eOcIRqiVhPvpmqAdIFIT\r\nWLSljPUarulJQxQBi/hEC2XCxHbgziBBR62lcI43xg8mxdUtm+5BBnoVYHV/\r\nL/ZG6KLBDE4copgtdrsExccewcB2GZYPqbqae5+plMQRdakolAhuBVibpJIk\r\n48ilXnvwJYYmmsi7/9fIuM1Hjw3HivfAHKg=\r\n=rP0P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.3002.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.3002","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.3001"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.66793","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.3000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.3002_1653586304092_0.3890316939774663","host":"s3://npm-registry-packages"}},"0.59.3003":{"name":"@fluidframework/test-client-utils","version":"0.59.3003","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.3003","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9dc695619c631b75042560f03db7f428c1d3385a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.3003.tgz","fileCount":34,"integrity":"sha512-uhj0NVBhL6xI2wovxh6hkrCys4SqkVm8QTXrSrtuSH4nGu3JJfNRaLYCbZBTIn9IPVQzTItSFwGW5EQmHdV6oQ==","signatures":[{"sig":"MEUCIGjkAwhM3S/Qsohwxwq1qCiSpNZezD3LYjOv8c0LBAwlAiEAtlTGsv48BzQjyd9gubDYlRmMU1Uf/0kTvLBsQy77SoA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJikT/6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo3BQ//RyTKs1jKLNnZULPO3DBJTbGkjrg9AkutciBGGlD07MkZs8b1\r\n625hGSdpvKypzpaIzt+SIGCjuwEmYFobppxoLvX8Y+JEEI1kxADrzNvj6e3Y\r\nJI/R26tgPGXPOmB3Ka5C7i2/V0jfNE6dAIqutpLjYwsJsEJgX8TvK5L0EYHm\r\nq+cv0PzrXE3eZBNpBe3UcTw2Rk2uwyKwKm89s4uqKUVOSaJUdAEeAgaObGBo\r\nTQI2pRMJWUADIkSL4iTXCrJhfbZ31GY6iQyME+T7TvVf0nMwt17VPW/sMtxZ\r\n7QI+CnqMfHnLiKUHScFvi9vuaDXvVW5lSwwRoSKi5cQmtP6gt96wqgEe2ue7\r\nfbSCWTr92hY+nuZOmIMKZzidxwNHViA/yQFSDvds1KE8kbg1gEmRjHRNo8JW\r\n0zPH2rIM7QUJ1KxfPZneuRC8gr5fRRNqx8KwVu2ySByDWNUUl/6i4QZPmjjj\r\nvm/9WBenDL9iF9PTmd5e4FK/Lcf5uJ+Ae6M+ybx0KzbOQQgKh/NmhZb1yb16\r\nbXbIvxZ6GC7Ng/vZ/5np02cC7Rbt+8pWAubsXhQp73NydRUG0vZ/BQoK6jpz\r\n8zfl6UoO8GV2Nzl2BHJBdpwED5rXAlISCPKkGUCwt+LCI17kDI18gBlX0Der\r\nE4B/1k3lfpK5EJ/eD0weMimggUsh5DsKPFA=\r\n=mP3v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.3003.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.3003","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.3001"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.66793","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.3000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.3003_1653686266090_0.759658449149206","host":"s3://npm-registry-packages"}},"0.59.4000-71128":{"name":"@fluidframework/test-client-utils","version":"0.59.4000-71128","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.4000-71128","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0ca86c7fef09f1fe2148bb4ea28e612b0cfe37f9","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.4000-71128.tgz","fileCount":34,"integrity":"sha512-NpeEHchLWHQRhHF8W9FoaXhIOENno4Ajgcne0VuRH2yKInReo9zfl5dMzSKF0YzDVSL7giVxPZol+5h61Gj25w==","signatures":[{"sig":"MEQCIAP5FUX+3+GZXomYk8yV5HABe9Ed44H4rs3eutJuFMltAiAzFnIZGJ5ELQ/CDFauCVk9CXgtVmWO7iOcdZ9RgGxRWA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimQhqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqMCg/9GdcGj51LNxQpl9/ec71O5+EzKYGpQ+6Y1vhURmz35R5GHIFC\r\nHtifNJvCInsrrLHIZy6HYV0J/gDLNueJIJswZXeh/iNwMY+kX/MMQG7ukjRU\r\nVJ9A66uPWnuehjUMPS1ONMm5qnYqsl2Fzb9/IFMutx1Kny/n3za8r4cFEvfy\r\nh7v+9RYZX2Jy56FH1+2yolFR670sCtZPeJY+kILOpFCQI6cGP2CjP6aYBPih\r\nl2z+xx0zwzHjw+vhUTw5OmllfIelSqJmlFMIvhGiMCXcgbOyTW6dVghp6ZwY\r\n7Ax/Kr8C5AR/72zFXzBy7n9BEfNyD+4r4/NTM8VjqTU5WfIVBm1uamh7eHmK\r\nRlBO7d7WHAgft8/nI3fOfp3vrZqJhdfT35ImNj1iXaFE2qwpD+z1JXr4YduG\r\nEAsiNWgCev7CU8WEoh/T3z7XuTG6/MlA12PKYxRGb48A2JqMFFu8ytQdezjf\r\nnic/op8UXuC54tgDX3irOuMJRnzFfkCnbHEEGTNcukD15AF0XRSYbINL0VXL\r\nTNJujv/2JJVfn3UArQVPUjQToyJPo/PlpDfkeLsdHjNArHjzUgPgo7zFd2v8\r\nOjeErolREiWVZfaox2vqQFKJCp8bRVs5BEbGAULnLDS99v1cn93Wy6Ry+Yj5\r\n/1Nvmfk/2SbTzIKrwEAepUXqdGClZ2WBIIw=\r\n=l4Bs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.4000-71128.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.4000-71128","@fluidframework/protocol-definitions":"^0.1028.2000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.4000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-jsdoc":"~39.3.0","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.70857","@fluidframework/build-common":"^0.23.0","eslint-plugin-unused-imports":"~2.0.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.3000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.4000-71128_1654196329756_0.7862390731164564","host":"s3://npm-registry-packages"}},"0.59.4000-71130":{"name":"@fluidframework/test-client-utils","version":"0.59.4000-71130","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.4000-71130","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2ffda6a5f29b5efcb97007db3c5a231afbc1ea25","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.4000-71130.tgz","fileCount":34,"integrity":"sha512-+Y75cg0tm7ocMj0rRW12TYPrdYPWXyYpm4U5xjgNaAjFiHSyZ3kcimwSiLpPZ1bkzyH4COY/SpL+53WmYmUWtg==","signatures":[{"sig":"MEQCIC9qUEDUE6guDMMNASYy0AXjHc+BS68Belzox/vvUPMoAiBdqSl5kSGQCI9MCnAgsk1AzcBfWe9oKPtXgCyKXvBJIg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimQtoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqmNA/9FlY03DuADOWk6yhO5cgQ61tgar1P0qTSNe7f03vmFmAO6sDr\r\nPjLHc3eKvr7EaUypWnQ1bitjlLcBNZQIVIdD5+iFBCPe5dyV4/UgkMy2pNXX\r\n4iTzVvR8gORFT06JXSonNPPPWtExthTqZ8YTMgCPSymzCB2USopkZbN7oIeX\r\nvEru+xqnMMPWTO6+J9S4ywoAFXXW7bZzWPYmS3e6fakDlLWPoJeAUvXgOl7X\r\nSeqLb/GjDaVZJZp2Js2vcfXUW20JZAi8D/erYUyaxXfhZp7EZNNudpBo7aAP\r\n+heoSBrOENDRyW4dViL7ajpO7PMuILDHALX9iXjuxzq5JmjfvzoOK+TeBH1B\r\nLaf/9JNF5cVzXUK00qqPVZHRiFs60+tcim2jZP31VT8tHLhIj7jV4euo79+8\r\noVoLYsoLeTTwCf10HqK1ciOKbzq9VgK3fL60diT/hKsJL0KskqCPwoRYUr1p\r\nLekzU2oRiCB6jj8FCsEydvlRT8KFk6AUE2jXTQqSTkeY7KqsCn6y2ogO7+WQ\r\nDldRGFaTadmDDC5smyKDmT8F8WUXbCMYiUnu3Q6qi8eETFg09igAhlljIUdd\r\nXO49caByzehCtWIvZqaQFornIMNrEoWRKXdeG5Gw5k0WAAlaEFsohYm5VrXO\r\nsO1fcD1pXA10zjO8fQlfpR7h6h0OZBun8WQ=\r\n=SiUW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.4000-71130.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"0.59.4000-71130","@fluidframework/protocol-definitions":"^0.1028.2000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.4000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-jsdoc":"~39.3.0","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.70857","@fluidframework/build-common":"^0.23.0","eslint-plugin-unused-imports":"~2.0.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.3000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.4000-71130_1654197096679_0.20615942112821206","host":"s3://npm-registry-packages"}},"0.59.4000":{"name":"@fluidframework/test-client-utils","version":"0.59.4000","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.4000","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a3209137dcf7946b02ac91eb4c333f55fec78592","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.4000.tgz","fileCount":34,"integrity":"sha512-y2uoEOF74Q85LTi/AFiKx0t2wrris1lvPvfEBTzRB6hmRMezK5CeAgcGP9e1p3Ws3a7xyKyjYJg2C/XV49XbGA==","signatures":[{"sig":"MEUCIBwGgNlD4cfu0ytkbUxYFZimXnXFyIVGuIZkMsD9InlnAiEAt0l9WScy7ajumUlpGi1zuxTsWaWI2rXuD7HXdLoQmcc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimq3sACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoAOg//ehLeeYPGBYYzabGtugpYga/Gz5vvS0WYEz0yLdw9puSZypIM\r\nETnx04rC/BmC/o2N2mMFUxkK5TaWp6/wuepCleUk6V6FkqtBB1EjfsgKmMPX\r\nlvzFyhhq3+93f+Na8omYlXADm1/Ggijv4SRcsGh3IBeb5yaPuYAugPVcB5pf\r\n/uIvmE/04oVm7b59G2qX4Tl5cnNjT/BNeCr/u24pf1FrS4ns41eLK15VndG6\r\nUd2HLmCpJ4KWf+Y7JhWjWFICfd9sZziRjSBXrPhcxQ+qUyeupEvCcBkGtv64\r\nCpOWue0i+4HDmn3vbz/1K/NUUMp3WnokFSId6qsWXftizl4KlPUGm6ZXpalv\r\n4FeL7YAlbRw7Q0Sj+O4ZcWLqe7an0XOFXbT3eaGwKxDc5IqgDP0bhsInWzBW\r\nOvCUU5YjDE8oGB9pyEARq3uWgqEn28/IbCqRj0J0MMparNu4t+mb9tY8rv+O\r\nRRweNbOGlVrlIGeDLAKewDL5KCzGl7wKLvf5pjhh2jRK9oHpFOR/U7J0zDxH\r\nePeXSULrV2zioX4dixslgnKK07DE+iF+gl0GwTWK/hQMmWjj83M3GqDdgKIC\r\nUwE9v+7jlHrFr2CmA/iPSvFMl3jvtGGS9sLjepAQMPNooe1ft9yojSm7fB5d\r\nCxF2+NvXysltWTB1LmbfHvDtFh+q24KKKy8=\r\n=7Phl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.4000.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.4000","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.4000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-jsdoc":"~39.3.0","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.70857","@fluidframework/build-common":"^0.23.0","eslint-plugin-unused-imports":"~2.0.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.3000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.4000_1654304236004_0.26186709091790994","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@fluidframework/test-client-utils","version":"1.0.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.0.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d4eea1a274735d08faa561ad120a6bed638e1845","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.0.0.tgz","fileCount":34,"integrity":"sha512-+oiVSxA2T9liC6KUfgyhESL8GNASTC2LHKW1XZcWnMU3zjn9gGozebPvexm2H0yssOgnQ7zQJ//ZjOWFkA1w+w==","signatures":[{"sig":"MEUCIQC34Xk9EbilQKTm4nnPdUfuPZ7X3m0UO/2HDk1BvNB2ogIgJQAuNRVsvKvjIH7q5sAr5A/qe2k3Aq47yvZl+gAlUEg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJioOLCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo3MA/+LaHQRbMs/0QK0oVtT3eJC2XhfecOhCxZkIxRTSLljLZ04GWz\r\nXZ0aSRS7zaSqVCzpoaN/NgHa63QeJWFGO4FhNrInGMS2RIIyIIXnxssCRPYK\r\nKjcT6qcDgXwpQ/03158Gsa54kat/tgTgz4S0xiWfCWepMKlW/J8TQ9jh+WTu\r\n1vLTp8lt6ILLqXKfz6JGzQlEMSdKXm/DZ1hycq00YHULM0zQhf+5mmGlD5ck\r\nGcnBzlRFi1Vn65xZsEjB8E/jLp1awRYllJVkJllDo5xfu7p5YW0MtbPaXhsi\r\nUwecAIoNrsDLLVkSfQC4go6NblUL09JoqkXHbwHex8BbcIe9kIFO7uEyT0fD\r\nUMW6R6kv0CKh9ybFPcl1CLM2BhNurNF4Oeuu9Wtuor+KowyiNjLdJG17kyZH\r\n+SKH8sTTbKTYDNg8mvkOqPhNJciaIO/jCKUq2BEcApzvX+H1zvP32uN5OI+f\r\n/kX9q/J6e0Qf1XAo22Asg9ftz1IYZdf9aQbM7iDuNblyIJ9i1G2RYbaREPzX\r\nr2OoxvbRtrK+QbMa8XeM2bxSzJtPRyglgv/YoYwYV86x+lbGkh0Pq9Ne+dsm\r\nfvw6/CPtjkRoYAluW3D7wXc9ltG9DkkyJWmk9C9PTq/K5eZIctuQjmE4Pnr8\r\nnrelR+t6MAg3JtcfRxAKyynJWBLWXmbKIuI=\r\n=4oK0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.0.0","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.71273","@fluidframework/build-common":"^0.23.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.59.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.0.0_1654710978124_0.766337433900999","host":"s3://npm-registry-packages"}},"0.59.4001":{"name":"@fluidframework/test-client-utils","version":"0.59.4001","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.4001","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"470faad23ca12810fe7b098e26e42b36a1843b8e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.4001.tgz","fileCount":34,"integrity":"sha512-vf1jldm7L6hCiw8wHa0v5gX67ZCLGGhBncF8DfyCQm5p8F0z78E97CFrSaD5Dr++VGNJnQGjf6qpOhqiQ7m0Cw==","signatures":[{"sig":"MEYCIQDftC+95FuAlpfus+R3JcxRbSfw039gDUFwAWqmqYZQqgIhAIRV717EqEdiUl502d4ZRsi2pl+/g7OLY8R1OzaljLbI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJioOPSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo1SxAAoHbxdOYs9JSq13+PBQo88dxVXnqIcwQxtnbuOEeNJOeRkGHi\r\nXS+u16pck4fP6cg87c5tRN+uhMscDMG6wSpY2EJZeEzvf3idcc+JiHnKwgSy\r\nsgXpfSe1F80y2O1iIupAiwybAzMaGFBCPGSGXOafBgHxTyfAspQjJrjuGJ2W\r\ntLJ+TWxxFrPYm3cWidQxdtpVgv+2LNKgVXjxvtHjqjnjFnujcd8GIHdm0g50\r\nWHu4gKMd3tYy5+7MGd+ywft2CEVUOGDc0DFQ4N/wkB9gtJoTesv+cj159nDf\r\n7DnBVkMCpp5UIdSA7O0OmMQwd+lptokSPB+gRBp0mNTThWgr+wbW2oS7HH9u\r\n6meYqwfsvUfEtqR3cAWsAWpkraJmwDJKQjK6W3NBIbv7pyJTDh+085DLoACi\r\n/Vxe7sMWCSE/IrxnKrLbBI+l1nAF4gVESeN3QfMBtWQ4K5jxK41ckW+FHB1U\r\nAN2+0SzejXDqzrxHpf0B8608mmkUbLoZjPIL0HfWqLmjKbbfFwqBmt3zyIvR\r\nClyGbHdCNlETqI0Sp5+fIS5z3VbiUHUEhWMmGS28gyu3z7va47x5yClscSHY\r\nlPAlETn87Yy39Qn6yzmJD8GhBbAIfEt7Yogp270wt87qg5m+qeJ/9voUjHcm\r\nsOWoHZ6n1ZphqbROFPt7zGEFx+6O0suWSGo=\r\n=xbaG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.4001.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.4001","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.4001"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-jsdoc":"~39.3.0","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.70857","@fluidframework/build-common":"^0.23.0","eslint-plugin-unused-imports":"~2.0.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.4000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.4001_1654711250770_0.49091380781097405","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@fluidframework/test-client-utils","version":"1.0.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.0.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5c3ea209fe2b3a11c977042c6c0a9a5d6d1b476f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.0.1.tgz","fileCount":34,"integrity":"sha512-GvxmERKcGiFW4mND6dkB7O/nLKkiQwAMsP2Y1n5MtpdttW8mtwUE4j9It0o9skOGcRljcSVtalxhqPuV6pFCIA==","signatures":[{"sig":"MEUCIHEhkoU3gvUcKkHTdb5xE3WQlAYvd7/nlTzkDMIztpf3AiEAtvWK8G3NgIF2GdXl6bAzgw3TNKmrfsarUegOzPihLZU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqm3bACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoQzg//WfBpQmKdXXe/Pxb3VfaE6xLE+LE3JidAt4cYRvikLVVsyD1y\r\nBGuIWmtyXvBA/PIJ3jvASQAnNVFG39SDHlnBId+BOXrDdQ+3qKAt5ZbZQEsN\r\njCdW5YMN5im07HCl1MQh5uMLFrP5sNE3npiPk7OEdf5F7XsEZriZXinClIcy\r\nnOoTg4tn6ocqMJ6rqFYbX89QdZEgupvSng6KvXXGen/7EEQF4nOF2CsTnNE5\r\nhMuGCm0+fFQWMZr/isw3eKGgH4yG//0H23VrKtrIKKHmlxcMhaCjhfNdRlfT\r\nogU82EXesNlie0c0Jw0qW3pwd4OA2vHuDgGJqVxHgy74ZImFxwmHgkCvvBVU\r\nPuHI633htFHDBvu40/KTxLOEdEF+nIVMOnzknMVyTR4V0uPEu9t4QdOSwe4H\r\nERnBB84fHqxhZpfeP0ZOHjiGHSEZecIY5v8Rv9qcoZsQ8+AU1DqmY4nJXz+q\r\nkOdN3FfwR0Suv2Mvtg3qi28nb4hp5xH6xymlRP4jTqsi51Ib9LN/tsjjnU+8\r\nP0FRDgulju/huRTwxPJE1CnaafpIg//nyi/uLKZCMI5PkkXbB/Ds8qVXOWcR\r\npj5jipl8f42wnJQ21MgLSKKy5S3zxRComJOHJJhU29bdDqUeaxcYUf73md6b\r\n1d/mJNJuWL2dxKKTEa1XsAsE1voriCy7I88=\r\n=3eS+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.0.1","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.71273","@fluidframework/build-common":"^0.23.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.59.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.0.1_1655336410983_0.08776926057250445","host":"s3://npm-registry-packages"}},"1.1.0-75972":{"name":"@fluidframework/test-client-utils","version":"1.1.0-75972","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.1.0-75972","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"14b98b7353ed3e704a84717b0d270e9d4c2bf26a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.1.0-75972.tgz","fileCount":34,"integrity":"sha512-am6F0m+17qg/YaAJ6Q/6pKdMOjFWtHxOcOR685WL2raOcvzucPGCW073Klg/rVPeckHmKsd6sHGs3Vz401XNQg==","signatures":[{"sig":"MEUCIQDNm62IPzvhyQe4sepscJsnTTDuUSu9QWdOcfemJfD+RgIgPHDNBdG1dEXU+LQD0WIbedDfzvp/bjdWUZv+5iDvrUs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitQ2IACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwOxAAojlI1EOsYy2sMzHm7T4BOS4lIQrcKgCesCR+I2cfUCBsmcUP\r\nClynBd/8Eyme+vWqLXYGv3Uy8IJdYaKMV3TH8zGwRexQJtwrQy/pADS7jB0y\r\nukX9r0refcBtVcxYsf6nIHebxGypLVoLa6BR+1AAYXjlxNPUmZTdLrheHlF0\r\nr+Y1qRs3dtE6XOZYSYSlkIQcRyacPp+fXqODOL6nu7cvL/vEwmJTL7IBkGqH\r\npRjh/FXxS9AG8wbx9te1bONVi6bhk7ezSj9NCxEYlIZFSFZulXIUENlIxrnb\r\nUAOIviR9T+ukoplcoRM7WxG/QNg7CWajLwu2ukQsF6MKKEXmT8mG9HO6YvgC\r\nH4e0CbQ06CI6tubs+UXJOv/L36LvIh13KErnk4mK4zWAUl9aX76+6zSkca8e\r\n+HAsBRslvKZNk8YuSSFasRbExFY2AK3wyp823K2b1ATxOxQhg6j+9N45abo7\r\nyWLqh7pG+32/P/t9EytIDLjR4v1JyWhuZr8yXZTaj9ctBBjh0kcKKiccrSY8\r\nL3EsMgjNmlmd7j5O+ruPzVpdis062O2T2gn9X9VDDLj6lhZxlZbky245iTjU\r\ngM2TtMuQ9VEB/ddD46BSG+1l9CIQHqvmwyR9VqKFmatApOhNUgbJdCp2MSG5\r\n10a1I83kvG8e05Ldq9cyj4FI1jr/FfNvF38=\r\n=VPSh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.1.0-75972.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.1.0-75972","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.1.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.71273","@fluidframework/build-common":"^0.24.0-0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.1.0-75972_1656032647956_0.630296919153218","host":"s3://npm-registry-packages"}},"1.1.0-76254":{"name":"@fluidframework/test-client-utils","version":"1.1.0-76254","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.1.0-76254","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"7f8f2e93ddaa8aa1fe8f98ce084c289713356a3e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.1.0-76254.tgz","fileCount":34,"integrity":"sha512-HINThZNGK6/CL7j0XA2m9wEGmUtXrLHnj3cHH0gdB6wF3tokupv+CjTU+c1T5YsJDqaEZ/Rg0dP5MudbW9l4rg==","signatures":[{"sig":"MEYCIQCqwMpbZVZuOqYzP5IrF2DIpebiePjBNkwg+HhlQt+IVAIhAMZaatVZcl67j3673YeRM1GrpyNJh274oXoogt3lMiAc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitiM9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpp7Q//VmRYoK1lq5Jn+kux77oOOXSjHENaMaYfDaGN8kegl7nD0ZvO\r\nATXlV5YUevGX2nQbr4cobFyf3ZMWP/1WQiclFouc/HcrNS6DGxTxPEwnQLyq\r\nqbnqSbOEQpQMuzq1GX0anXfdZsIO/kxuByh4ZTqunJfG/GKJQ2L53vlENSky\r\nmuctfqlK47ExnnSiGpeG52QjXkPQAkds8hV5kmUz7CVDpydvguiKHVrIBFbP\r\nymsCJyeftQtmf7suc02CWkEsmxEMTGTH90OFHaBpw6ebvTSqYzs/1XE6V9uQ\r\nMoIV3KcD4S1bI93EJEJ/pLqw6wQFZ+P3X2NKCZSdg1j+SDH1QVWhyM96HeAH\r\n2/5zRPxmrY6YOpfyyGDb6R8kxH5i5mxor/lRwokKAd/v56oiL2zzY8Fd0JcU\r\nQZcksLhh/vqXkGgdypvZBSgDHD7wiWmaQDpikYfRnzlYXpvxYNtWHAKgGXfN\r\nrkHngR177vH7QtMHIP92MGd9SvwjGJTJck/64aWOr5s104YFG6V/AjK8MTdB\r\ngtv+uRYwdRBxlsdNY4FvGYktQK2nRBgWJTiI8F01vfxYkvUCwgcjNvLC9evk\r\nGLBjRDz8QS8UiSjv1wtMl4tJujqKZHsakjijfhS9lYlMe+zWkoh/xK7gtrhg\r\nWBTHZeUJZPIYeqUFw0f2yzgAFOYpXis/2Jg=\r\n=vt9X\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.1.0-76254.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.1.0-76254","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.1.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0-0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.1.0-76254_1656103740851_0.6808252312681331","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@fluidframework/test-client-utils","version":"1.1.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.1.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e51a312217fd36767f2915fb96c4d58acd84410b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.1.0.tgz","fileCount":34,"integrity":"sha512-kvaRKG4fWXhO4ivUlZ0R63xwMFZ6omt8bO2icJ3nJETYdaZfbjmR7S18YHWmhfGa+xPx+eCbRybcxfndS7pAlg==","signatures":[{"sig":"MEUCIQDCQIrPSvyYIiEnvsic4zPz+Wqvzwr5FjKMS7XAeGBCEAIge1bX4P0vJCOS7Qm0Jn9x291Abb7v0ha4SOOwTBEaAV8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitoXLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqhOA//b0OErX6moiBAFOsnU4+a5nfxFNi+DUNiHwRk0L8YDg7gMrKD\r\nyH/198N00SV0pvlhZoY8Q/DTk7Z6KMAL9l0DmXqSJ9sxodTUCC4LUfAT5E9z\r\nvfIMh9RdKeRYx/VsTeT1x9oxTcL28GU6YXhXerwTcXJd/GqkX9eMOSbbUMdZ\r\nfCYXrdzReIO0z5Z9mHu1o+vqCDefWeVfG+fBjuJ3ufXEUzNNXd8/8Wx/8uK0\r\nmN22CimyoF6Wm0WNBbC8rCeA7vj6WJrkJu8D7xy5ak02REUCNKRP95JhhQE5\r\npKOZvZPj4rnqnT9KPwSzzlM728RHJLU6HLmp45Zxle0nVzKBbi7722/CdbVD\r\n385wQFJ66DG41eE5vn11AFJR6kpIjy+nclDVgksRuALT3K1tcgCkkzxc7aOT\r\nPCAgqhIGTVxnBAEMjj3eaASczQMOY2Iwdhu2BLlcddDGQKneBCAxRQBpmZ+J\r\ngyHSQwbx/xJzVtq9CCgjWEbQog49kvRO4AJhNIzqJgSjy+2IkpVVwpAjfqnT\r\nwHbUKSPROBPaA74k5gOA3uYXDUot0y0P9lkTRZYnSEav/uv8L8Iu+ZC0Ba3l\r\nHqO1ROsyI88xxSmHF/z9KzlbD6aoVVrK4Ivfc+0+bEmtFG2CAG/hePrihuZl\r\nXXepUYi1nLLcslwGlVxNUsxPeSdqXSWY+lY=\r\n=2UK/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.1.0","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.1.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.1.0_1656128971495_0.3601237917394604","host":"s3://npm-registry-packages"}},"0.59.4002":{"name":"@fluidframework/test-client-utils","version":"0.59.4002","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.4002","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2e06063ef298a6de5a76d647ec5da1df78923419","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.4002.tgz","fileCount":34,"integrity":"sha512-9oq+JHgT5ZkVBW+t6+XGMIF3qbddP1XEKNr/Dr3yCI8v+GLr3poBtW8jlBtl8tPecWj9y1FIzX2GI1ctIFuTZg==","signatures":[{"sig":"MEUCICCJf+d2BzUJBuT2PGu8QNcNdznXv7vC7LFl1RFVHpw0AiEAll/SdO74kNsd1kIf22NSupAq9czevLKiUQXin6nXOgU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiu2qhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLtA//fSQ/WMcayscrRcfFOlyjqkXXoTbjfNlQszD+KZ6g7Dznf3eP\r\nuVMdEP3/0htaeHtKdolERQT8ywPJy0WA/NrKJtZatNUhQSetXJ7B9fLwkZ4I\r\n6So1k1ClGQG7n2kGAPg5vq9LRHhVwqN+WtTFUQVonP521pil8wJLSqbF3g0z\r\nzOSTJBGm1udmI4ptXbJ8SA7Br0XZNMOxncoDBAys1o5QUhrwjLqeCcuaOLXM\r\neriCg9VVpdnUVSFFQdKdoS0bSss6e7x3ZedN89kFX+p7hH35Wl+QBwhV21Tz\r\n/719Sxeot4xyLDMrU0Rp8OswWw2GzeTm+oWDjIjAFroei6d7hEJ5FRREaBYy\r\n58IrA/yw9zVSLjczFACKlST1GTf5+fB1KDDeHgdDCrBObLKucp1Ws5BfdMfy\r\ndHcreNPOnd3ad61Kmz41g01sOjtU0HW+v24p4QUqq3RKWPO1GWoU2mgb4wqW\r\nQI/warA8K/tXIKoJ/thEu+M0fzXurHbkm2htYmNoz8ohMgqzIgoQCXeXRIui\r\n+2t1vnB4WAWw6I8XRMobXZDwNEmaP0DNnkGLhFr+WzkRyfIQSPN50roWBxe4\r\nCyJsyvO81YSAxOKEH9Aw3Y2WZoRqsku3QmfxWO4Kg6YYoaRuXrZvmM4eaDKa\r\nXLcLtgQj39tM94GxEgcRqGNWhVUAsc8YGKs=\r\n=jzb5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.4002.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.4002","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.4002"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-jsdoc":"~39.3.0","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.70857","@fluidframework/build-common":"^0.23.0","eslint-plugin-unused-imports":"~2.0.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.4001"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.4002_1656449697535_0.4622347872195054","host":"s3://npm-registry-packages"}},"1.2.0-77818":{"name":"@fluidframework/test-client-utils","version":"1.2.0-77818","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.0-77818","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a86d0a97419695ffcf14d7324619bd6e328cb15a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.0-77818.tgz","fileCount":34,"integrity":"sha512-0GIfrIyU29P4Is8Ih0mXuH3WlWezlBo7Mu58OwAfEfhFWB5aNuQ0ubht14u1LheqjwKsPWTHIROjQj0YQh2XbA==","signatures":[{"sig":"MEUCIFcdfklM4oDFyiu2SJvZDXUuR5bPnzFV6G6glH+jFFHzAiEApjmL+XvEQRtJV0PMT3QcFNp1GEbEuSzfAajXOiOpaIs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivjqqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo74RAAmIo8OgIqNHqErot/9z9DIhmGE2Z+W1/hZni5fMlsDCCqot/d\r\nSeSdBZgs8gjsKWoFOcSMXPQemM68b+Qu0UzWX5HNyuPrx2ZFokX1KzXJVzh8\r\nGnzOb/JbzqJPAEPOYSJ5JcFO404x8nL4owofiaX03TcqfXrVSL/OkjSdEKDX\r\na/TxKwPNWE1wFW/j0ebbLp3KLpNNzlHomdPowy3fsj/f/Q7meT3OUsXSPtYw\r\nh3EOLPp36HH/3FciQP+LMImMYizNaP6Bp1CuqMx5QK0EXy6dIg2gV/FG9r4/\r\nKwcHVEogNJCeICQFvIz1ei6dUBGlaVJUtUYV9mta4TjqZ2ggj8L/cLyiTvpu\r\n89IB6U6CYAL75gSnrg5sJMPjNUojlLx5bl5DoXDNVy315NVbH2qMdSgKywYj\r\nelKEd/eCuoLyeM4i8cdxIbOZEfUXYYX8aEAkq43dotUeP2jOiGWHXMvnia23\r\nCOT+7yLHXJE8GrdWTBhTDRbAocpJRrzjrLxgTTg2bxM6ieQFKJBc0SB3PBCt\r\npRBY8JfpxDH5FcU6F495ZC1y/DwULhc1a1bmHUokAElh0E2P2Tsz2zzfVsIq\r\nFugY6mS3tG6Z8WHy1jvl9muuI87PMDJRB6IFxObbPmqcIxVBtVHjCSAYoULC\r\n22cWBkIWmDHQie7CZvhRIP03sfuLbGY06ZU=\r\n=ncKK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.0-77818.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.2.0-77818","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.2.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.0-77818_1656634025856_0.07877381183065157","host":"s3://npm-registry-packages"}},"1.2.0-78837":{"name":"@fluidframework/test-client-utils","version":"1.2.0-78837","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.0-78837","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1ca914bf78a2da9f62dc121160543d5443832cbf","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.0-78837.tgz","fileCount":34,"integrity":"sha512-UaL52zLspia6OvqiQ+4CU1X5LXnp4dkTyi1HkgdOfdSjcLR4izba+nWVCUl0LkcAWG+CsQuzgyvaUcyBtTMCGw==","signatures":[{"sig":"MEYCIQDgzfnq9D2JSCsxUiLFX4DlT0vBhUS28xHX4o9M8gAeeQIhALron5O0nz8LyJWc5pfmI7/mrzpHRE60c8jFjjhAgv1/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix3NKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqmeRAAjTm+RS2wKUcUpCzrSDrzTMgv9mYIGymKPlRFqqpH+OCrj9TV\r\nACrbdYAnqLQghnIPX8imfjSZUJNga9ZKAFuxKlT12jtBlUcnkCMbVo+x5v5r\r\ni0Y/PgntlguzCqOEURm+CDeC7wBWSnnAEU8YEBLVlpa/gfIMFiZWZopAQBLj\r\nr8zJllw53pfesSuz/YxUlG1AiRj8kdF/WB8tZ9ffRAf592HKsSlSMgh/KBqo\r\nkv1wJ9iyIoP49DhPwCrJ6s6z5pYzo5+Pv2nq6clYu7pA7NaMX1lhrJX1IS0R\r\nKh7y+uteQZCDQ+Jylr9/niem+tM7zu6GJ4HqVVIBJVps8Hrl071YRZ9jO24a\r\niVBaYmkroLZXlSVsedFSJdAs9Yd8+UGAFd9Ob7j6pfT3gyoBGm1+NpIPq6pV\r\n6uQPpMLczOOqBWEIqbqIYkVeVgrKXxyJCgd0mnYhZ7E0Qvw4cQeDNMee3ZXt\r\nb1gvp2kbUkKs9FDMbgmUHNSLoHs0NdmRmJ1v3CofHwuptoAbSLxWE8OMTZ/0\r\nnhE4kzcvWt0XJ+HDefSjfFcVaO7ZjZSipzIUfxPNwk1gjZZR9LzKUNRhckps\r\nKIV+d6t9/gMEzKf4A7nw71fbUCNBd0NwUSOc036BZR8sLREUetA1yj33QtfG\r\nh5luK4R7wgov0KimXYJXN3sjEUBGSOxnEys=\r\n=4AKe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.0-78837.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.2.0-78837","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.2.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.0-78837_1657238346551_0.9288377086121384","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@fluidframework/test-client-utils","version":"1.2.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a8f777e0d21aecaa2eb49e2c9569ee69c003981d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.0.tgz","fileCount":34,"integrity":"sha512-57TkQIeaW3EZTNgtlbkNjUovoGNtDBjOfitzNheoUaQhOWvRj8ImzqNeRRI8PBYy7OeHNdODny8picvTS9GIrg==","signatures":[{"sig":"MEUCIHl2jFmIuAM+YHsfGzhfaLh25dSs1xDysfrDh42Wx8M4AiEA9lLmcGvGIX6T7jjuXnmcwAGtasu6L5YsNraYqC9fg3Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix4BSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqJJA//fdRlLjc9csAvDu+kVGO4DWR+/d+MXR6fZrAN+HZdyIqSexWb\r\nE++iIZGAMMB0uILHvX0fLREvD9zSOebWky83uQXgssfTma4PS27ouO5At4ho\r\nmtQMb9XCs3VesKNPRytLugM9UNbbdTF2xWN8c+9wMW7+nLqOskeF4VRY24Ny\r\ne9SchUNDY/16v/qqGgEB1KkC0U6oWyaFWI5Z62jpiyC4LEynDgs+pCC+nYr3\r\nhYMMe70ajrNBuxokwNq2vRunx97e3v1xFpoovlWLsfddRgRXQA2W70NPHtnB\r\nlfj8AdwKonR1z0aY5lt7VvDDLcrzMTojOJeJBYVOQe81OEGRllYSDT8aBNHy\r\n3G+dnzi9EL1nA+YkMCik4FnKZ57ElETYyVjur/oH3UVNpoFXhs2tYxoylheA\r\nsC/8k9ThkMR31+nXH7BR7Y/drV+nCZvN4w020kc6SbaI42E4lFKPyaDhCAtj\r\nHHHzp4IfIKHDqvsVjZuCBhTZ1mHa5nCTXxbP/qaMEktx01UjSu6r0lwdrqYK\r\nZHt5UwoAaHFflL+a/eKBGU6v0z/xckN9dX9p3r9hfecWVt9maIGs01MM6cZB\r\n9vG8qFkt24vdCRV0APurnZqnEfJrDZnDGgQCtNHttid6GxWdotkq0AtvyJqx\r\nMxSFouK0kpxn2fDF/QKiYYLQG0ahxN8nISY=\r\n=3P/Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.0","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.2.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.0_1657241682281_0.7754624335598679","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@fluidframework/test-client-utils","version":"1.1.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.1.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"7cd6705a9b6056bc68a6db2c1fa7d6d0fa7c79fa","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.1.1.tgz","fileCount":34,"integrity":"sha512-L108PeUHUYumJvWU0YSqyVc0z36f+cO+V5gcZl4j4xO71PmwFop8U24Kd3IyNcq+oYN7oM0ARsccU6zco5Oqmw==","signatures":[{"sig":"MEYCIQCHsszYbd+BQAl7DvjhvNru21gBIh0Ug4+lKmJPZWK2bgIhAMcjrd/Pj17YjYthNBWjcgwZiTpR0aSU1xluXc/0M/hc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiz1EeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpR6Q/+Oa6xBWFixHQWNKbh/ykpaefs8SScwh6A9yfotMZvAxpvpXcq\r\nXWHnIRBO+gPuQBWMkIDXO7zuYEAfWRfphk242/BS+m6uZvJZ/t1UD3GJHBbM\r\n3gB2+unnG6al309N3ZKYobajS6Utdo14cEVLemjeyKLX/IqWipki7klUTIh/\r\nXaWL6tCmWj0WhAzC4nQUtw4tNsCP9DxkbM/kh9mhtgKdx5KtNZ5YpYIfCDS1\r\n/PQynF3grFQx/ZJ0Al6BohNQHOczLpggqXGLTW2sAwFAh16pYU/LD6A/ia7K\r\niU//B/7k3B+5YVOE4HGzrgi8lRmT1/fVurgg2nlZEOgFnBI3q24crWo5278a\r\n1FOXoCbtT0rGnMNJ+9Dg7Iy6tg8Q5Bia7CNngsfL5uGfBuE0lsWuRtsnTm6M\r\n/7jFHeupQDhPlc4toP8cRsRIpgNGLlVD32SgNBqzw7pn836mUlDvlEnz3k7R\r\ncSPCg0LIxHg/9r7eo3UTlg/3g87rsr/ULbwKJRlBhIX6X9oqs7BBVZkAsoZE\r\nOfeMH2ihFqoDOCWvWXL9viJjiP+SRm/eQWgKJCb5rLh3h4ZIB2LrZrvMYG7Z\r\n2x82sNVuBLVYQ5Re/ce2Jbz5DdQlGpXED/XCcXnrTNH51XHtggKDOOhDzd11\r\nDwDfPurPDdY+P5QhNWYQ2yhwKJ1qmz2LpnM=\r\n=pQ+V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.1.1","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.1.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.1.1_1657753886303_0.5836140664992524","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@fluidframework/test-client-utils","version":"1.2.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ae00ae1fa71dbccaeb26348644d496bee89fab92","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.1.tgz","fileCount":34,"integrity":"sha512-j5L3xr2GVn8sWDA9Rss8THOxLEtx7P21SlY3EdBO4BZLupbDSpZHGopYPMg68qhVQPuBZ1nHNcWHWUIYIxViBA==","signatures":[{"sig":"MEYCIQDLkF2Oc8CpiVBcrwyLYeNHY82JfftbV9kVD15NMWBnbwIhAKb5FwiQgxpnwX4+SF8ukAuvc3n/UCn3bI3lskUugoH4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiz1HVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrJLQ//edv8QpzrrrL1/tigjwW8emU6QzEA26Px6npK7ATwqn1Wszs1\r\nydrVlFLYw6qYoDw4ovSIsePWMFKF+LWiGYP1TJc0KtZPSipmIwhyy7w+i08Y\r\nKn4m+k73c8Sw1SDkP94PDz28eHvba+0A8935apfFn/U1EDM6BF2ORqRTKw7i\r\n23aYpxyr2peb8QBSgmi3TT8gKrC4GaUJ7i0VcY3WnGaTv74f8qUj+G7KUNeq\r\njguqPvoKXkoXJ+7NS/5+ALeHhEKMQkro6bzblyMTfk5Pg0ScidAFWe9o+mjP\r\nNYgpYBlK29f5tr69PyNt9X0BAqrc1aOSmf3Bj9AGFbRgMOBeep7KzmzH+Cu7\r\nHJ1wWV4NNPCdnGp65Y8eTSgRaILWwTk/LeJ6h/p/7oFPVjYvkq0+N03e4V4T\r\nCQLAXhg4isRNvsVGwUxPwNZbhW6hzopkeJhJVYKN+L5Bq99XpmdB+3pBl9hO\r\nwyRRMB/FvULk6cN/sTlJdxg2TVFMTKXsIKw6rk4rynAxd2QKm9HXhkOaup29\r\nDkwmztYjUdvNxUPlXmxMCJ7IBcS3ROXOYnp4TtRbRG1ZdZSsk0fAVYGSfh1U\r\n0s2QAhtnmc5VmJ5ICq9CXlGJjDaPE24I/r4kY3eiOuzY8aTPhu2QfV4zayVM\r\nvehg+BgA+DkBxkd4Xu9FyBMXFb6w1cXs+0o=\r\n=91yA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.1","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.2.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.1_1657754069060_0.9879616605289312","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@fluidframework/test-client-utils","version":"1.0.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.0.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4d7dfed57e295c9c2def506f9b7a310ea342c80f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.0.2.tgz","fileCount":34,"integrity":"sha512-uQF9+esZa5YZJc7OF5yZXQxMQgLQeQM9NTN9MRAMfc1FBD13zqh7rf+6e3DJL8zd7Fyzzmk45AIDISWVL/XyEw==","signatures":[{"sig":"MEQCIFCRwf0o7EXMEfw02245YwbQKaBFab77Pp4EyoUoyHR7AiArOmutEVnBS/R1I3x+6heVVLCjiqWdEiZcqwPGb/Oyqg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1WRdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrLfA//QXQTRCHrI0wln6YfpDFcjeu9HNbNhm+X3+b+B1R7OAIvfq6J\r\nrrwLUQNrkTVcQOzP74XBMf9Bj7G5BtYGxfHmRAivdeUAPVXM2JUtCQP5md3a\r\nw8WhF6T+BHSs2bQkfvNp1xINs+lHAAHiGrTMtisnq+gO3JT/QDYYRRBq0Ou4\r\n9lXtXsmflZv9Y8YaDJtWxXqI6wLwPUj36Ij4WgYWhSGPvj2saQ7KJDCD25NT\r\nwUqyNAm7iRi5LVVnEnsoFxZvmXtkhy79Hp9GmsDwIQR849ESCHXYvWqFkq8W\r\nKUYd818x/BBloikRbpAmdRqBmly3eGhMd4FRac3IRqIJZVNLiuIVb4QuXrVT\r\nMuolCPC8W2cn97HANsp+RlTRFHOgWRUOWFSNvrtzQ/N5T9WyHvNXmPxPry8E\r\nA/7kfUa1S/NtSQmRwj7LCpNs/fheUEe9h9aGOpPYs8E1hjSlNtRt6wV5ERem\r\nNG7TMFCF4wl/N8c/Vl7kLd7dR1qiUjS8p7CyJJOGxW49LqNha6t0SCDPomx8\r\nxlEYs/BJcClzLDmStj1D3Wc9jcMtiTrzFlQc5AePuOUCamByV+5+8GQKIkBx\r\nooN2pqfAE677HiNVRZulOw9+JRSZjwI63FxNUHiHauF5glrzp3RWpWaMwI3n\r\nWzX2cHRwp1zj7s2geoqyx0dQu/aWuJxwC9Q=\r\n=UmO7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.0.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.0.2","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.71273","@fluidframework/build-common":"^0.23.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^0.59.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.0.2_1658152029626_0.043100238003670466","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"@fluidframework/test-client-utils","version":"1.1.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.1.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9bd5e30590c47c451a9bcc04e38ffd873dc65c08","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.1.2.tgz","fileCount":34,"integrity":"sha512-ejGrZVbmD19zELEmSkKA7X/S8EZahsO0K1R62FZwbuzoU6hhvilphHjnpLY4+Iv8pj8zc1TYybYNi5Bru7PXLg==","signatures":[{"sig":"MEYCIQDnzktH4YKhCAxKg0CCaGG0ljTSSRV7Ho+0QI3a2CFXXgIhANT4ACQW0GHTzpmUFjbhD7uaPJth6M6HvcxiHdNBwu1d","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1WSMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmodkhAAlN+FYkHb2SpHJM/Pv/lmgnydjay5lgnEfOyEIjnA//+4OdO+\r\ngF5+C6KsGYJAArLBplPsLLzuzyMUUjiFnXdJgiQAUJxpKFVzZDXbG94iUlXa\r\nMG6fXccNmcr7KDA0rODAp1VR+6Jq98hEBn3OiwPpsD7nlEM/RUPQsLE7IEmt\r\nIYa6Mti09vRJqehNw8GPBFR33yONBW3kPj3JLMg38ggxx4SyvdgXo/wmjzNr\r\nKM2dkgKAksaAcn5WgY4FASVpAigzPtYee881dGIf1KJ7/OmVlsxoHVz+sVNu\r\nKRpYGd1DJqC804yEKPqHPuW9t4YWFYWKbf9EnvIDBNAKqb1eK1jTv6ONieKy\r\nEFUV+1D1AMAMys8DGymmHdVheP1ECFulFscJ0qg2MXB9bKzD0GPyau//MCOr\r\neX9qayhds633tZ+QtPc7UQpRoABRNL+D9ompnNI4dWF+KUYujFVsgFKUpX1B\r\nKm9v5sg5MGV5W0wqhRiiXhO+wTXa805NQkAhgM79M2vRStUFUWOwlHZC6su1\r\nEwPSfhKHlzLL0bMb7aB8f28KSPc6LZ3R66qo0fxP3CQQBQrC8nlh7KHhc00L\r\noXYNQ8NK2kKYVWy7qQzF4tK73tqMmtkBAvgVBSBfTD47pt1ebaq1e27sew9l\r\nHBKzORrgWUyZDrr1Y5zpEQRg3aE8Q4xNFTE=\r\n=vvAA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.1.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.1.2","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.1.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.1.2_1658152076749_0.10687867905011594","host":"s3://npm-registry-packages"}},"1.2.2":{"name":"@fluidframework/test-client-utils","version":"1.2.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ba60c165899b9b809660603846aa67272479dca0","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.2.tgz","fileCount":34,"integrity":"sha512-R/LmVrL67pcyaZoNoHU/JLDINxlODz6787kQQgQjBV4pBYfrx1wszEtzVSUFhkoNkF970iSlhdQOrk/vWtFe+A==","signatures":[{"sig":"MEYCIQDK0pR4XqRhmbloYl6c15uyUQvc81AtWNBgNXuI5NdsFgIhAJbtJz1fyN0nnPJrP9so8BjTv8axBKmanvfjuGM5ovxT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1WSkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmon6BAAji/2RITxdNflEjZHaIEUif0jUSvK/nmUYWZzlweLjo4dJ3m3\r\nunIQyp4pr/3xLf82eT31Bf5AF3n0IL6yg270vmPBdDSCMhIgmCo2gBkAEjQU\r\nowOy+Oot5En3KVBKjtKH8SSRt6eeh1enLxTTSOha/odgE9KrOxJUoPDJekQl\r\nX/pvUOTqracAMTTv7M4ZsUfzhT1XZXfTiqEoYCkpBsteLiUXtoUV1wEv27P8\r\nJuR8DkRf6WntXxQcebw4NylPwQqIOLR/Smskm2Sf61AYJIa/RhBwyDEiL5N9\r\n7VFyHTBt2GMveKUqezMBk1MIQ0YhgiyCagGTFxwzob3iEWSVlJOIr8b0yNlX\r\nwHwyYAKzcSqycSX8ar4u4okBS/7Okyi5QxfXWghDvSr4UX1NbicQGtFlU5An\r\nig3xKYJIOy88rvy/ea/OgyNikj9D2VO3xtFXYli20N7bhrlqS/mZzHFtJ4Mp\r\nIModpjgxP4p3nDQjXzZDMaXssvrUsMLict21avIkXd9cn5X/m3Cd0bRkOm9V\r\nC67Cl9SpTWChcP2OMmCTdmMXcO8hY+71QCXwJ9Pfp3eOcf++fQypB69Syr5i\r\nUHp9SUGSYrTkrx8SSHt8+fvmrnLAI0/BnHP1KjdxFXxxJLSwHWRqo+Cldc3N\r\nzYeILwzISeFSiSmF4feg76FjbliemIoBkL4=\r\n=P910\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.2","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.2_1658152100229_0.6830197891606469","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0.81589":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0.81589","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0.81589","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"db13d8819f0cd984ebfb2d57b0bffa681d526666","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.81589.tgz","fileCount":34,"integrity":"sha512-GY580PYMpTKLQ3B9837Wes+Z4hrk1UI4bDJeDREFjMD1dthQuLHgls9p74vIw1cj3tS493GQGsx3Dp1cMAaI+w==","signatures":[{"sig":"MEUCIEEpP5q9FWjvNp2yqbM0qaR3Ee/4gVAko3gb+5Q6vMIeAiEAoFXygp8+BCrgJcSsnelMJw87xHGESvaHpaxTcFi8e3s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2r4HACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq/bBAAhry6HhtCzXhEjujcPhpTiA1VAI3lCI0NZQxhLihUIJB+o256\r\nLFuTOr/HNjy5+hYn3Cr1rgwpMBMJU8RroWpt1Uq2ck6ujmeAOkRvOxCfyrHt\r\nrsPzTaSbsKYXzhk5DwsQc21AT7TAGklqxWWxrki2Sc58U2ikwutFpXx7H1GM\r\npHtrJpSj/fl79tS13eEIe+Ka8TCutZaIC3AXUc1d/wR0jGu+svCESOF3R7BZ\r\nxfndDLpo3gP06I8o/NSxnhjeTPrV7JfAFjFW/HSUHycS9UGznScRq8jCMcoX\r\nC13p8MlIVZN98KlelNAJIe3Ey18uQCwDg23ozZuPMIYRTbTwMKfr+EWPR6zS\r\n+wXZ738HCGMIbhMcFgHZH+fFs5ZIrrqhccxHkyUU3DIWpRvR9Ly4tTFKP6Z6\r\n99I4KPUN/lHewb6TodNb3tgcOCFlf9w8o+iOCeLU431wsG2H6/LbGPeRVPx/\r\nmC+vMBmx0V3diccuflaqDvi62UnuruE7WZvI3Q8wSMGC4yg/ST/cP4zTVp80\r\niZGvUfAGYb9EfqqGLXFPVnRK1kxDFAZ6SUxmJw/15tbnME7LrVUDkx/egBS3\r\nEy3Kwstgj6vUG/KATxX8AmrrZhFmFny/woOqHayQlj3JT6an0R1X5/mmBPgc\r\nAkxipS+oJpWTHYketNeGOqTTHOMWqhVA6vE=\r\n=51Fx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.81589.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.0.0.81589","@fluidframework/protocol-definitions":"^0.1029.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.0-0","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0.81589_1658502662830_0.7833872747848432","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0.81601":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0.81601","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0.81601","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fa5253252c11c94b2ab36071341e7a8fad6e4db9","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.81601.tgz","fileCount":34,"integrity":"sha512-f93ChrVgQQTRfTn0HA9I5zhiQq6ZtygRYAIAo70OnlXIslOMQX86igpVsqDk9vl/Sr6R63yPMhUGkoGlj44MuA==","signatures":[{"sig":"MEQCIDHtC1JAb2w9IqP8y3q9jMXi0TaYLyCgjQ2OGL5QPzAJAiAiVWqYP2oZaqEpSpr0ON3bT3hFZP4Sjk7xpWV3Utvv4g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2sglACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqKkA//YxquD0mSDWgQUAwq2DdFWzwrMm1Ij5jQZ6okMIxh/S55ldq8\r\noPytY0G2at0wfaHlU2ezJ1Bn6OUVwRjMkDmPXfU1OdbZWzHyBiaSiU7caOmc\r\nNl1dmsnbXLCNjtz9Huwac4q7xIRZCn8GZxhV0FwOt2cfqHh5YIDMZ8UoCHek\r\n5GpjwMWh0a8jJfpKXz2Yeat51YfADmhgTrXaJ1kLy7VWs7USlzplVuXzZv2J\r\njaEpFa5bxUi7xu97sk/eVBhZaYnBJ1Zp+xw/yeNRNZ6I5DmjEsqBEUSmV1G2\r\nAUWZj6weukxWB8bg92lFlp0Gb5Mgio9O5ObYhs3WSt8n5pTc+mimy2QoMvCo\r\nN3Q0ksdyKA8SXChe8rfgxuj3aYHjnu5c6pQB3mvNdC/woJEZDAjTe5WMbCYS\r\n2BdGq3LOogAzSkbCGRY8ZTnIX6gQNT+0gyyXbBzETOI7aGjgPnZQPcLqNaS4\r\nM63m3yPVpN+or3nbZTgEFhkGVmcYgYzGy1f9dPxQGSRaaCjXRDC8hxlCZRWJ\r\nOYl1J6TaKYX09f4aG9sRy5oj0WDkIBTqAEigEPA71atPwCgV94GhE+xIj69r\r\n/CaPRUfdRHArc5N6LNzRPv8C8zcFD+a87pLGTX1mWG272jqZN+Ox5rH0JOYl\r\noa+R49AJynu/T1uJtBsW5zPPSsz/5+wMDik=\r\n=yWVt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.81601.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.0.0.81601","@fluidframework/protocol-definitions":"^0.1029.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.0-0","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0.81601_1658505253141_0.1372123372848726","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0.82159":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0.82159","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0.82159","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"aca74df65858a23e9b3687bc266868752c543f1e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.82159.tgz","fileCount":34,"integrity":"sha512-hsGMC4Lymg6DzT42dTVjaqfdi5QBGNqJjXr1b89OeSq5b5iM58XoVoOBr7JounDaQGmEpmUwoogZn9Cofwqeuw==","signatures":[{"sig":"MEYCIQDOnh4Fro8z2xuSG8LeFnBYnzNfEXY3GXpLwmBuZ82F+wIhANoCY22/i9g6L5iwEz6iMBtLItqzTNkkJo3pWf62Y7Y7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi3/zxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpzRg/7BnYOb325gHMufThYjz+XMSMj7AZL7Fu1Dz2UDFYfpP4j1f6W\r\nc4wfBJDjQWAIh8JUegKZmvM5b1BkfZWRanYtI0evql7HFI+shCHMXFqp7zf/\r\ncXK4UtjWTyJPcB4YOW4SowsgiNbJBXnfLSrfOnUx/731cfk5cdl1KP6L+CoN\r\nshoEyuQFswxC/N1Tc1sldswYnmB6+WxvGTTBwVOmo/FXQ02ny2AfSiobWhNE\r\nt1nvDa7WcxtOzVfxl9jYYfCglHvTN9wElq/vw5c7vQaUmLMuT0OPe68iwHRF\r\nBfzAOAJ11WLO2tiPQ3lcfyz1HWvBQFBwXoaxU/MMLyTrpLLS2ulZkW8DpixM\r\nY4gGrVZXyUhA7fOvQDifLZJatfODOz+6nw8ntOfZB905RQzbdsGa1glr1QJP\r\n3XXgLdTgsetJ3EfVSDqe/0fI0p15nLK+ZRSKR/4xYVFOo7gvreOPLGQNP0zi\r\nhua1uKdnFZVAhXc/P/nfnPmZNSbLwsBsJcibDVZ1PObJUm2NlgpERFJk0pLD\r\nQxjyDQJkZn+5yDloubQjRH3nBESp5VVLzjeSDOxrJld3X15OLt0OZM5Jwwcp\r\nNkfcCNwBVmpr/oP1gS0P0QqaaeOweWc9zkS4x9oxv7lFGvqwk6Qvd1Ns4ng9\r\ntZlT+JGlbnwev4GrgdoLAgoHB2t309exyRw=\r\n=9JZV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.82159.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.0.0.82159","@fluidframework/protocol-definitions":"^0.1029.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.0-0","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0.82159_1658846448801_0.6808080077225178","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0.82628":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0.82628","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0.82628","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4757bbba5aa39901c11e5fec5faa9fc814562051","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.82628.tgz","fileCount":34,"integrity":"sha512-DUfrI1hSkfvMg9BS9oTMMlEN4YXV3AVcsFWfab+75gMr5wY0kucWy9su8g2I2enqYmU8M6RoRExCpYZgFK7OKw==","signatures":[{"sig":"MEQCIGmrhD6+39jD7YNhedJzgOoPKTbx5UWwe1g/0/5mA7psAiAXNRa3HT9GtctlXZ17y68sQnbBSwP6jBPrCjyX1GI2Iw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4r5aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrWtBAAnuabHM85szX0l9Z3W1e1oQVrswDTQ07TYcwwPHVZhO0OGM55\r\nQ1u5/8JiCxx3twVTi+TIrGdmk2d7AQ+UoaSsHz5eD/npaoStLwKmlFcylOiI\r\naMW4dWiTFByM0iiAJ8qJ9ibqB+JKElK1DUx1tWOtb+0qU1jsRf5SSYj+bKMT\r\n9ZehidwJhNvOig8T/ACxblmRGTzPLKjodRNB5X1dQUBgWooOkgrmuNXNQxwu\r\nFTcr+REE5ZxmUXrSQFRB6X5oVFiTkvpbp+Y5eI6ijNdN+Lp/87ftDsWpvt0v\r\nGIPPtQ71oOuzdiEmBfipCTyW4bbd8ondNklr7gA+5vdBs5KhnDsuocV3oHL4\r\njSLyeTTb8e99o3OEOynmLb6rlFrDKDzmes+bN22YgTQTtI7IGOe9mNXWst1h\r\n9Eb/zOEg8N3N6aR9yu3SOmr51KCdfNfMcQCAEYEFSclUUaxHv72A6kFe3DG6\r\nTR7nwIp7CGe3vhf5CTUidDedNd1y6Qaz71p2qJ5p/pYbJMD0vv9nyD6fAUd/\r\nN0NPCP5ZzaRqpGbRwVp1l0GesnsyQlWorSBYO3HtmfUqky+OaaB5jmad8PQ2\r\nSqo+VRKEj/lo0sDreO6attV47+vZzmm9E39abVohIxe/JaxSlKaZ0KVQRij/\r\nBMWHyH1e2Axy49MBEygu9+xMhkZ/M5QOYmA=\r\n=Bclc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.82628.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.0.0.82628","@fluidframework/protocol-definitions":"^0.1029.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.0-0","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0.82628_1659027034306_0.18585899216378166","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0.82693":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0.82693","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0.82693","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"209e4ab90f6f25a3d72c89faaa94cb5370e0251c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.82693.tgz","fileCount":34,"integrity":"sha512-P1unDt15W8F6bej5Wmz55EA4jQsrDe7dnjHqda2+SnukjmnAaEHwEx9EayC5Q5+uRJIc5B8yoSGfxYT6qatVXw==","signatures":[{"sig":"MEYCIQDbcGO9ZsMEXfc/vKUQJWvivACRzzlxOJu2gGOtb0NM9gIhAIy4N3z37EEBk4MCG/6wOKoXq8rwQmRO9m8UzyUfP7rb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4ujTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmroEQ/+JVN3pvgm5S5WXuBTmRmVbrpaE9EFeA2+5BGprX2+Q0OyhOzt\r\nIQzWXkmAQ8/I+wCQOwhhYeBnXKGg+tqGE9mPIW/V51pdUtyZW6HC/UxKkg/E\r\nI/oIQwevp9PO+B5V+128plx1menobhmvFsh92edNjaiIAO13q7KDspNHc+iC\r\nlG8sXyRDemy8PRpiYpfi9ug13B2RzU9++W8rvYkzbgkceM3ttPyhmr4b+ki9\r\nZ9+0IMqQD/fGNtGSuGzOCmw3V2Fbn+or3JPq3R16lsL/pLTqZV9pdTOTW9di\r\nTppm//5F70ljbLx782p4ZnEIT/9s5Qk14QHbTLWxcpaUstdjeUlHCw+7y66H\r\nMHVu8n2gU1hCp9RAa+bg2+PXlrgiI9jkZZPsZSGA+kgavw48HsyTL6ivw1kl\r\nl2r3WalybtMoxyXJEX2UnfJ8N4I0A/fZU7s6fKqxSPXyGXAfPmZdAUTDUCr0\r\n2wDTG7W/+sh8fZZqkyk+I1Ycl3esSIa+y45S9ZgoiYY+p35SwcK4A6DFQe3V\r\njDhyAF1rnRxXK58fkh/ocPFlgzKveHmfnX0cdKB0A0LjYy8i1hEvDTL9T+r/\r\nLcQHqYajax9YPViV1meJZenOo9WXwGshqdjzA7cO/8jASOoN8cB16hnJyyzz\r\njnOiGpPK4WVcspXeK1BUKuSLBVuKfdMrKNc=\r\n=iX19\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.82693.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.0.0.82693","@fluidframework/protocol-definitions":"^0.1029.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.0-0","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0.82693_1659037907686_0.542995391199963","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0.83139":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0.83139","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0.83139","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a085a3a7e505466dc9a3e3c5f9d49fede93453cc","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.83139.tgz","fileCount":34,"integrity":"sha512-qwJeYvdZQN6Fhmt+/YikuHwRHbNQ6TW5lCeK+HPU92LOUXFQ+HL52nG5IjhK9s1AvwRRde9sIHDSJ+cpVu3SZQ==","signatures":[{"sig":"MEQCIHtvtQCRRZtyEnx5wN/U15culmfBBgYUSJiQAe2cqafzAiAnNmITMjSxQY4lM59SsQW32/QM1ZfOrmbxutk/9PFARg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6EY5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpI6RAAgwXT5teFPtZdRQlgWuAePdUtvl38IfGt9zwMF/QOGS+TGWbF\r\npeoncRwWBO6lVaadaeykyTTG2XNcRapk/e8DpM6UXBAA2hzUKleZdvT72KHD\r\nLV88U1GW2Td+CmC+E65RTKYMAVlcx+tUwUKxJysA/+V/JAWVvP93FNVJME8k\r\ndVro5kcat++ddwnVqXHfb8R8eO2oLLf03Xc5hKY7+HMraVOXdgt4TmO4ppWT\r\nLEsWVRoxkS4cQA+2ZWO5jmuUsHHaHxGcCOtiveqEZC908UFygabM7tIP58JI\r\n6h3muBgAuHb9sbH5pM2jDWIm1sszCyhEJ4/qEMiYtrjHTAr8OrPNLD9zZeh/\r\nSwCtRtrQl8648ts9r/F321VpPe7sEmZiGkfiVDubc7koLwA3C9/UqzOhrn3+\r\nE7FBRqWBLCWX5AQq4Paz9tJrHLgvAW98BTzf67DoppIs4eBObdUHRaKKI5iK\r\nqLOSSHxOTUwMHhZYbLZC8JcDYa6JZyQdcCQ0Q+mKTYEV+3A57SxRIEUr8kZf\r\nGX8GjxO9Xjf60ge5mVvNoOFdpbXuEEUrt31D1wk7bQBrwtEYSDKYzn4rcN9A\r\niktqP7KOM/AEQtYgmd7/4ygWKa7ZMN78rumuvheXVD+b8YDpzwARHZS770uD\r\nszXeUjbRzu7Tx2lFg5pyndnfjzfaHYoZC8o=\r\n=CSko\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.83139.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.0.0.83139","@fluidframework/protocol-definitions":"^0.1029.1000-0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.0-0","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0.83139_1659389497465_0.18753754249687393","host":"s3://npm-registry-packages"}},"1.2.3-83900":{"name":"@fluidframework/test-client-utils","version":"1.2.3-83900","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.3-83900","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"726484478352ac1fb9317d7e70fa6328d5a867e2","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.3-83900.tgz","fileCount":34,"integrity":"sha512-UD5hxlNklU+z9XAlKki4l7NygIKrYLbWsPTQ6/jD9uupETdcv68/UCnFYU3+RyA5iyhezyYX756PGXjGTKEI2Q==","signatures":[{"sig":"MEUCIAR0BRxNUCGwWhe7NFY2ZF5qJrPsgAM2TutwslPWnJVfAiEAmBzRNSiYZXSyM/cUdcFlS7gV2Ar0fFVWgxbB2OzA+aU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi7CXpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrXbA/9EG8tSKcJhNR2dWpfVOOpdU0M8FGKIqPDMxEEg0e3yuJgHWfu\r\nCAgv8N2ikqQEYV3TYUWKImyczhHJmNRee3+tYrmo4AieJQ0PD4O2pkPo73He\r\nyhqJ2bx6GlD4PJWHsCT6krKhgv3oIWPyuFwbSfpfjRZs9cFE45JQozg0ooX8\r\nwI+c2UQDO1yfaFWKT1WnIi3M1Rh6w7F4RUrZnHK9HSBJrGaw1pDsBisPvPQ6\r\n329OvrSCpxX7K/3jhiQKkxIavZ65dp/QrypKyOIjRdaIiwS6uENQqMjBUfWk\r\noSJWDWrh8Iarh1Z1pES3s9eZL5I0wqgPSY11sx8Vob+wZYkE578G1+o5mx3n\r\nUYqFPgCVZXWFRRGSbcmeuBM5pUCo9RccwhU9Lzhv3tQa4zkvSvmGyDTmGPkC\r\nsh9WCklHIB2PPPAgB3rhyi6wG7kXgAt96kW0E9t2T89J3kOrfD8JxcfxRg3j\r\nsMI3Si4OQeBQHlnVnD17dL1N5C5dwUS1y/Cz+GgcTlSStQ3KjD6hTM7bzzl+\r\ns1B61oKjvREzbiTSS8NktlCorCy8UsO2BCzQi8HfHzVGDzg6/o5HjsVZXGRV\r\nNG7U72WFVI5GupNiHCTRNyzozd+0qgwEMh4SlOBxTYJm4hkr9LYVOY5pDkUv\r\nIJ7SfuYkGH6U4gYDdhIVi6+38sHKXOlB6X0=\r\n=1vIu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.3-83900.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.2.3-83900","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.3-83900_1659643369523_0.6973142755703239","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0.84253":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0.84253","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0.84253","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"7d038b0ae4235b256d678b60cb4709fc49842734","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.84253.tgz","fileCount":34,"integrity":"sha512-Rl0iQgf8gwcCGWcnFX34a47kOEFbN2drDBvJMRxIIS5Vx9Ww03+xBTLtRse2vyC9Iy5aBeCPEdqC4NGnUbkKrg==","signatures":[{"sig":"MEUCIQD+qruvjwn8uoPTPmDEVwvXkoYtoFlblndJIjj6T6hjnAIgMzqT5M+LxY3M0mfuLcTYUDmENeVSo5P8uYwYR0ew8f4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8WSJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqi4A//an9Y7bcQukelIYkU9EepmvI/mFyZDCKITS+dY+XL3WetkmYX\r\nqSDT/3koGPMKpV6O7lviYTXEZTN76WSJPoDNDt4zNoZIXzDSO5HzquxDMHFy\r\nYblyxgmlecdnvXxHQh1BC1o/HhBoe6IhUqL/izR0IQXTdHuS+Mir+g8kR5Ue\r\nDdI/C/sEs77LCOYs+CmYBNlUzfTeGWEuLguz/B2hP4deTD2POlbBo1V/TPHf\r\nG+pOlOBE7Bxz/JoCB4+JNEiym+DqY9wkxXXKca+QC8WfFxDmT+WRi8Ri2jV8\r\nZOQBBhAZViotxpn7mDL0As/4pcNj49M/ZxfzkYRdMMYPYXBWP2tgGA1ERy7X\r\n3VNg7X11VjaaPj0sdzGQKu4bJuHxlKkqEd/N2KAiC9giuHUqUoQ8NLMSxILh\r\nsJCj6O8f/YxsX2iIyH5fsXARV8gW+Voy6cco3VW9hReRs9wyKu9NHyyP4O7W\r\nqM3eHtSy3wo4NUKJAHi6isyDBeNQ/gpxv41vzZcCQYZ+KgmUa9rbDr3MPsXg\r\nM6BQ+dnPOZ1xg2yLQ8Gf3e1QeHZWP9RVbNIp02wcetwu4s9966bbh3Elg1KE\r\n22eEVP8H/wlCdbSd2SNFXstaMTp/XRsADnIQC00IszMLgKAXA5WEsoaMGQy2\r\n8QCJcOVBbGkFTmvisSj2pj3W97t56tDvPuc=\r\n=Qk4k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.84253.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.0.0.84253","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0.84253_1659987081553_0.43416823542234906","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"eaa91e3c7bd27fc5d0b50747027ebe0d9c837ae5","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.0.tgz","fileCount":34,"integrity":"sha512-4v4UgLp7k+2BYemkUo34wOmkrYp0NEpeGoPcnLP9ndmiC05UqaefcMfXvu86+dUJ417UGtzqffzJQolYStitMg==","signatures":[{"sig":"MEYCIQDa6LpcrYEKqw/c5FTLpNokmgWn3hh4JxRcNPMjiu4NSAIhAOdeBimtR9ov4dE4fDk8fNFwrchSmF+KMezo6yx+nzsF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8bYmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpRzQ//RMB6zwBtKECLyPevYswDqu9GeCYooP6a5ayqgQzoYJHRTuv2\r\nsxfFVo4IsZx6gdnwu2PXM2ZCjaGitlux5MFJnvb4gSBCGKEO5O9LI1Z8jLmp\r\nFd3uVQuVBrC3zk4zz44by33umxdAJImMb/YCXcKnMEGuFd23I+ymjQg8uRsb\r\nT+Rwg7klIpd0Zc49FvmK2m8TxhOO5AuB4maNhO+eRTgMA3kp5+VToIk0PPP8\r\ne/pWZnhNjDIiy2EqucA/HbY5xM7Bt52EoYYgXGq+wPX17oGknrCtDEN1p6dt\r\nQ7rIcYWCXp7Ec7cY7yzyLZeRrJYWZH6A9RlAq1Dd5hMvzpcJbQDsawy47gBG\r\nobovLV7JnP79wrb0dfJVXKHChNqkojBynn7WojykFhykFplxlH9xdQ6vZJCM\r\nCkU83lQ36QjkaJDKoFz6sBMQ2m4aP6ZO0xB1CrcRy1T0woukHwOT9Iygd+sO\r\nvCpgRTG18q89CcebVWe90NK6otvsTd/NRYAetnhWs2VTGlMTknhPiauqmWur\r\nDs6eHQazjGJ3y4Zz8kBTrZOLILUuxIOHyH3LAMb0TIyWtEeFDMsUqH7AWfjo\r\nOEr0sF0xPS1fhTEu33LUpg49TTNqwbjBiqLXKAFb2YeXKcfqlBqs6tyeVqSg\r\nqwUQqeL97+PSiM9c8cq6dqfD5Z5HaImGWCY=\r\n=GhUt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.0.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.0_1660007974566_0.6076032768590671","host":"s3://npm-registry-packages"}},"1.2.3-84921":{"name":"@fluidframework/test-client-utils","version":"1.2.3-84921","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.3-84921","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"760349dc786e23f4a3484d91246859e16dda70c9","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.3-84921.tgz","fileCount":34,"integrity":"sha512-s5cN08O0TW3MU1cO1vZJMjrY1lZGh+XeESGnvx9K3Y+Oms17nLplTlp0qG7VeSLV8Vrja+wAqxGUIXWYJx4jEQ==","signatures":[{"sig":"MEUCIQD6+MQtEB6L+zzAUjmYKj50pzKIET188a764hbkHiS/DgIgIqjhp7yONqTikXoXfiFaXNoyq7lSnMN57qcV+HUQ8Z4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9XVPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpTCg//SDNpXVbOmdxRlXVtQzBv+FS0H+w5ovVWZFG0uuEa3cmVnoU7\r\ngOG3UxW/7NGK11zWORDpvTx4r0TdtZQEihEOKuIkh6OMaIM6fudhBjeYT2Cf\r\n3Mc87VSqI2o8ywMgsPcmBXkwMIeYk42CXmeP1Bzgg807ZbE6oqQmEOfk0T/t\r\n9byz+V5PYMiScopTj5SLteqEWXOpN1Kc7bvq6T72NgXSQ8ONZIBKOgvo8L3s\r\nBIUDkGoaMkiBu2xdaTXeaVHHOqv8eg6iJYjYlcAE4jg5jPHE3VrMqus8EWT9\r\n8NNRdKxdpya1VphUi8N7ZNY3oEvYqlvbfuBKakIKfOrsqRZoHFRAbVIsgKuV\r\n5ZYBj22ZMyfc4EqJzDdut8CVSmLoqabiJvpjBgjuBnjCrcCWy/2R+me4yXsu\r\n/KJWbYxnTgsa2SXOArlO+tBw1DKIqky8OI9K334eM8UW4DSdVIpFhfFHi08a\r\npjeXXAJGf7FdHsMnAwugyaaM4ay2d3KL7e1bxWOXiqxXspuu5VraGR4CWVxo\r\nw174mQEdmFQqWs+BtI0E2Y9j5z+aBjpiSCaksz6a998S7uZ8d5Wm2f4YBZA5\r\nIQ1uLVj7D9OQJ5Is3N8A+8B21WC7715teGRYoLJXcv97+ExYEgoI9AEBO7SJ\r\nQDYYr/on8jD+cgNwZN0CyAsg7oddbWHseCM=\r\n=NrDH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.3-84921.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.2.3-84921","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.3-84921_1660253519773_0.3341997119445701","host":"s3://npm-registry-packages"}},"1.2.3":{"name":"@fluidframework/test-client-utils","version":"1.2.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4a84caec066041250033ae0868a5f104e54dff4a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.3.tgz","fileCount":34,"integrity":"sha512-JE8HPvnL+OhbyV0de5sXOYra7Xc+7Tt8tNVjS4Y8H2T1edDcqtJVHCr4G0cPT45iSDrtFnmcSII/CXj6HG8Ejg==","signatures":[{"sig":"MEQCIGiugPjh8SichlSd02KcOTwPy3MQ3nJ5Pp1WZeErErfsAiBb70og6zIW93UpkbIG/kL2rrOs+uKeOe6mfOausNVZyQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9YXQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpSDQ//VSlI3/yPUdYrP0hfFXoXcQEq1gOi+O0XIoByuY3d7cBTzbGd\r\n+njbMcbICyS/MNt1jT2yZ8xaMUdTj1Ahxb/MvFin+cs+X1NQinGVE2BYkAOK\r\nY7POS8l6b+NwmJ9krKkXoHuBRA8pcrfmfZ+yTPggFAyBsXsceUK3wEX3YS5m\r\nFhE/yhkM+5iTH9XOJ5rWPinVNWff/3pPQ9Lzj+I3W+v/S15RF0UUIiPclVcc\r\nG5ZJFEwRSSK0EjKxpO4O4cay2DlO3gM4ENThCT0ts/nvMasn42pR8jYCGEKv\r\nwxv/KFNZZBFasqi30pTJR5gZOxbUE11WaZD9z96d17XIZpUS9okTif0Fwir7\r\n6WqfXB8PX5NfcmbcFvwzjJOYiR2okvjE4I1ESCzEYvEvNWISKja91+xJ0pXO\r\nGlPqnYcfsDKXtLccYJBTLI/4KzvwtVW5wpa4Wn1dCH2469dpM3OPKeyYaQ47\r\ngvePSMokkvlckR7dz13lYfTQVVqIBfl1rf1niLNlFCCYeweqC0HZNQPuIcWS\r\n5DXOzQZWoRTdGapGhZr+umiSW0/cIt/FOLJRk1XQg6h1X4NyRDaJ2OaxQ99o\r\nXl4XAT6KiEbHBcQG/xSD7syrb4vuTG9aiMSf/GnaBkVYowmpIEh/VnD6d955\r\nMkhQ5UKAarh3JVveU9wqmtB90mNEfu+eQhY=\r\n=7NpP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.3","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.3_1660257744490_0.2446311090784261","host":"s3://npm-registry-packages"}},"1.2.4":{"name":"@fluidframework/test-client-utils","version":"1.2.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.4","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0ec3bf845470603d03e98ad429d5ef236d71c17a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.4.tgz","fileCount":34,"integrity":"sha512-NwrY9QiNsvaNZydwiu7pMDpa1pehIOfozK/IrpXNKFVbNDmz3oS9vv97X8PhMowGxphboXclMYp/9G4uiF12Jg==","signatures":[{"sig":"MEQCID00P2y6Ccqd2NtH0xGFK3ExkhUedMiYuIL51N9+wDq3AiB00w63xSmOJ12sJv8SEzg7MojehbQ1KlxovDvcOIJnwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBtb9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmptJw//fJiy5SQiwig4IHN00hIqj91kpKz1abrGj+R0AvJyKEoCU5tI\r\njY28OfeSj1Up5zQYK8Gyzmre3nyk5+87wSbwgj2LJaTZGzpNneTIy5dT4pOU\r\ndsJ4kF83CR4c5pMzi9zSOap7Ce6wH4mOF5TDNciypvOqEfI0iSbDh8ippykT\r\niTtcoFG1i9eUui3QaukYz38h8aSALFIfFrA9YzJONy4DjMza58vgR31bUOCs\r\nDvRYYfE7VyQMBDyBeDGpaVDZANf4f2kjl2i9SP6DXnErhEb1AvRWFJ1uWpmi\r\nN1cCU06UUI1QfRba4KF6jAyMYvOy9j7oufq9V3/8kh7xOJzCAUl2THQc4gwi\r\nbxRAT4BblpoTycUYaTfG4RKu+oXCuMmt8o7izmBPPw++1y+mEED9ZjCGfNps\r\nUW/arXAZgklZudMYWXPjPE28tSjkqhgtELxPtdf8ZIe+ZisOPL5mQNdSYtBf\r\nVSiD2au7W7ghuXtkCeszaoVREbp5TfVPktShZZDByUuio0tKMuNql1/SuMf1\r\npdE5Pu2JiLDkDuPwRx/aigWWMeWfUeKbM5jphvDiDEBYuS/U5FLcB2qNx7NS\r\n++nylfLEA+aOXbbF0NMywTOT+fvTzqQnPO3S9qeYYmXifLMkSJsDDV1iuMk8\r\n4+Zw/6KEJO6OUn1SJUeJnKmVnltcL/YgJ1g=\r\n=AwVl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.4","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.4_1661392637733_0.7717409792124361","host":"s3://npm-registry-packages"}},"1.2.5":{"name":"@fluidframework/test-client-utils","version":"1.2.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.5","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"cbf3575008e2ef995d14f07554e9d73f5bce97ce","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.5.tgz","fileCount":34,"integrity":"sha512-OFkeQa1ovuSpjuSLaiN1scygKXRpeYHUb7pvv2ZrBVYf3oAjqFfxRJc2WD5nrDjXYQ/5FDg709PI4rsvr3MMEw==","signatures":[{"sig":"MEUCIBdW6Y8wVdqsvDgkmdA4zCpM7yDODky2gRok53IW/fSKAiEAo+C1kjgLTJNPHR+s8Ffs7t4+rpNtm1G0pIrJOETPC1A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjD/NNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp6mA//TgsvwTea8sfV2B/lrGgXvk2p0v032EoAJ30EU8+CObMkBZNu\r\n/iKJr+9F0axyW3RdbZIMLzd0i1fnq0XRsn1tkuKbpJ1r+ghFDDFeQLTwZQ+M\r\nCKuzdnpnrp6+uezx2jRKKmPfcz65e525SAIcq4aqy9Z9b4QZIwLp4Q55zaly\r\n2r7UV/vyL690VG7zNJz36pG6uTh4sXTdojOywomBfTceRFzZ6/euIdxPkT+e\r\neJu+74OvEgpkvKsMzFEts6MiCp8h4p0+llvF0jhx8XFZPVZsykH4ndTjiWIl\r\ncZ/YsZrVsLPR0hr/dCEQF8BFY8NOn+zb0jdkMDT81K78DZNlXvlvb/2+jy1r\r\nq5nDW6MPFbCzEXkUsBMSfvNzD6VUo9fX5wL9wNofAELd7CEC1cUElfrIYU1u\r\nm3uUcSOn7TYsRFmGhp53HNpODTzsrPpWHyGOkjT6IwB7HMfkuuT12YMwTAXv\r\ndlc708/enku5WemrOTuKstOKbAlh5RbRMbysxnqEY4QncDtOaMzQsuf7dX7y\r\nx8NGq/r4esNVQaME+vq7Ab8JNYjEbAhQJLBZcEhoAZlqhHTurOkxIVnFiTSp\r\ngkaUEmcX7I1KZRjP2O4SnO7gNwng3zyWVyOPQgUcZlEKpXWDukfwZt7s4lz2\r\noAa86rf+wspdrXdgyvI4Y7FVjyrJXFzKAcE=\r\n=KrcH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.5","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.5_1661989709020_0.8072131514925016","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.1.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.1.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.1.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b598ce67cd7a44f18e3b6defa8fc2802ae119128","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.1.0.tgz","fileCount":34,"integrity":"sha512-s6aMwpGF2k2QBPjsKAC3vQXGXoafiq5IFsScQos0VjqR2Y24BtX76vpRkZS/0YG+JHGxPQy0YNzHKge8CdWsZw==","signatures":[{"sig":"MEQCIE9fRfqLgXJJ5C4JA5h0l80IBkBdqEM3Fhqb8uqbtKm9AiBW1/cyeNHV4YxQ5y75wSgdNMduF+Q3KzwwVxDfwxIgnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjEmGrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoxVBAAn8WuDf7lRX9n1EBWb8i1iy9vQz0qFRbmTR2f1mHBmKhUR0FE\r\niqQQOO739YyLsQTiFvHRArD/4bnNO4ujgnMSGh38X//VNBgguL7QHGvb7kJK\r\nP7thRHnVr3sF7TPpmoCsb6hT/g0q8tPJbyXDPASfR0uYntg41INJaTU/Ypze\r\naG7xo59VWavgLzxx62Wa4fy5oxHZsjflJxlm49JSM6dtto83OGd35tFh1FQK\r\nUJLrTUIdd8QMb0BjhgPhTARtdjzQP0zlbAooVHHXaEGPk6Cj4S1iUw4UU9ec\r\ndZEwME21ysLoKH9GVvBrI8YjFtrr3RNLNpL/1uhUm9wN5A/1yRt1TG+IG1D/\r\nug9jMPBkQzg33oAa2X/Zo7nIsyDfgkTswL+Te/9LNAjGWggpRZSSMVL3P/ZO\r\nApjLmP7vaWrW6FiaXmTjha8t5gmyTTzJVIrL/2sZihxUddDfE9L/GGGOaenn\r\nEunTtOQ4PEWVksLAagUYcuI7uNpJu1sBaMWaWY/75OD93Muvqo5CLnGXz2yk\r\n2/mNZbFH3vqtZ3DHS3rkBtwIGrFqPe2BpjsY0slU8gb/nEigLpKZ55+ybly1\r\nQcYRz4Yfg/Wpl2g/6on0erCbSECe+oFNCt0dlFcoC0SRIEJ0134+kjYRsLX8\r\nIJqacow/Bi5CrBfV6DRuvdbxATMWHLMRx1M=\r\n=os49\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.1.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.1.0_1662149035209_0.48336085568771225","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.1.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.1.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.1.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f1893816ffba6f9609a08b49f93df0a605480b21","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.1.1.tgz","fileCount":34,"integrity":"sha512-LsfD/t4mhKQo2BibdVmEGv8LcBLdZIRJ5Dpe9TELzuph8GLQKV0ND6td73JeD4xoue/fUZgrZi3NIs7vQYYRbg==","signatures":[{"sig":"MEYCIQC6BC2SBhtoE5nkfhdznqXDVKXvc+t0DInibFwwuW4tAgIhAIjO4g/FDJRlTeOQl27xFG0DDoLVZfiqO/o5rnwlrDN8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjG7JyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmryPA//T1klMYeYrupRAAwvyhBjt3wQ9jHra5WTOaMMLbDwPetJBTkb\r\nNdrNdy/BKpacJAKBiL3sFuf7cuTjGztLskDgoVZjrjJb26Rqiek5c3jpCcrG\r\nSKgPut+iYLCjCCZskGXub7giX5Wswegk2XA9G8s5EbKApAxTHPPRyfx+l1Ds\r\n7CZG2Rx6XcYt1eU72zr6tHxUrOCYsif+QMMrmPGSdxIViouw4XpVjxY82JlR\r\ngOI8dxvybIr/czM+1iKZ9R1VAjVBCAJwCGG4DOBvCIih7HeGx43PLg+dYG3V\r\n0PBCsGTsxJNF2QZ3l5CfXwFAXmHFaTr6sfdeJnyzvJqzcR/4mpDXHJzGkRaq\r\nR+Tnpvnmz78wxpM6k0fILxGQQmo03+PZ2ldACr3JKaDutVjMNBmoay/BN73c\r\ntkOWFRzBUYK6o/F0CsLlwVWLEanyCyEZUMO/UwaFj340VJlrStslxHyajOma\r\n5EAk05HZGcpMbkwo8acWxowMRWkcQmMOnKniJ21WcB4rj2uS8wxTGPHnhWG0\r\nAHzeznSIMxfPhQWI+o86MhD4Dn3IEqLXqq0gJfPl9FgHGBirmbKwMCEXx4ig\r\n0KZlU4DPSB4B2q1l1sRvsSpk0ReGMF+INx+st4X3i+/eEc5QkZ3JNoJK3W/f\r\n173myUEGL5PB2IeFMn4FIzP3PIxtNu+hvE8=\r\n=h4fA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.1.1","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.1.1_1662759538607_0.990347365177074","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.2.0.93071":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.2.0.93071","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.2.0.93071","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"15e2867b420480bac84df11b437ba4ee26cc4dcd","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.2.0.93071.tgz","fileCount":34,"integrity":"sha512-bm2DnpeiTQl98zik5e7Vpy+zXv8lYr1OKyU/BprWuhepJr0evCIuRHUCA0rxC7w9tFFn00hq1t/utsEtRc+G8w==","signatures":[{"sig":"MEQCIGjnbx8QViGNWarBXRGL+8w7t3Ja2vw8TLaWfOttpHSeAiA4k9qROTXxutITGLFQvYoncujlU0FR04Hz/kupxOFvqw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjIj5RACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqjaxAAjwKoYWkEhwlV6Y0UpMUAW5JFJNoOImmwXeHymXjT0Kr5VoI4\r\n+fGj96rnuUyJJWov875mTvWk9n/DexsOLS/BEn5FtrBywCCXGaBaHQNcl6+y\r\noZsfDHLxownucFR/KDDLk0Cvh7eoN8bmQ31NHwovNm2BxMRlCzG0Hg/mr6+s\r\npkAyJKBp0mgYDI1U0Qn0jwCvZxR+d0kU28xvkGdXZj5CEeSfTpvGzvwBk6M2\r\nadZ5aq8+U2iwkRQA92fODzVx3YsPAcULzwaQ+uXjbFdQs5lxNYDyM+ipvCeo\r\nJnkbJByTkZP7CE3tzjJcGX7AdovMxf4IPZY64UZdQ5/ovC9NAlWaA16EgTm2\r\novxJWOWo64UIrVjspXGpsTP+CIRrj3pcKDajI1bbTAgK/w0RuCtmeLELV4go\r\n9qc3W53B2SN7pvGiQA8/qE/jCDq5DSehFXz3wXlYPzcau7brX9Ggaxb/QcAq\r\nRXh6Zmgfo/5ud85+e+BdZUT90D9I81KLQ/8hvRUxzmxzzJliLvGIM2cL7E1L\r\nEKK5jFHgRi6gxA5k3X84E2kXTkIsZxt6jrNzJrz2sh3ut40MxDNXwSj/Nuwn\r\nlRFEdFhLUWQEdhaj1+HrxjVB5iPzAdikaWusbwha/0ePZO22AtwyooAz8RJ8\r\n3FYhg1vwFylMutgXXnIlutcx7jaZU9jaCMA=\r\n=zQzb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.2.0.93071.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-internal.1.2.0.93071","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.2.0.93071_1663188560805_0.0014351163309467285","host":"s3://npm-registry-packages"}},"1.2.6-93452":{"name":"@fluidframework/test-client-utils","version":"1.2.6-93452","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.6-93452","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"886e092e5f72faba10f0e0c97f1023acee634d89","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.6-93452.tgz","fileCount":34,"integrity":"sha512-Q+LVloy+bXejqH8apGLzEugznRP2DslNhUrLYOcwgxzcws66ZfM6q3AOCMQpXr7LHQBcwvpxy8XiOdWiG3GAsg==","signatures":[{"sig":"MEUCICcOgRAFUSzVaOChdiJcUizt5YIVQZCiKDzG1GxE7zPhAiEA065WEji6L1uVBwJazVMrHbQMbFeJxc7lkAXtupeQIsY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjI5EfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXow/7B1U/mxSEr5JefFZCmlOLL+h/BYISYIy/Qjtf1rV4m6KTTrQL\r\ndl5XSO/Ieiwwd4nSHhFdY7kj50pqLYq/wQ6mOjNXkaFoEn0sil7x9Px9sFz2\r\nmfcP8DBIB+PRzvUyPR0I5b3TLH1lTenKMxXKG9y2KuMl3O1F/pbMMWytWBuj\r\nvsWSHp6547yZZJBEjqwbWo5LcgA96omaw7VGwrmbR8HeYgwCnyCXqxbH8hzR\r\nFk7moxt4jDBXhbviStlprKCOShOz8q180VAWlrMS4+BWGuw+hN2g9g6NlRrG\r\nAW5a+qnOh03tAYivr2K3mcBDsNYAKG7wjIE66LLhq/FQvu3gryDToJCNKGha\r\nmH00Nvp3Pk4azbv6HxjEeK3C9bHWoYvZj8KvC+kVsPbsqYkdpcipgzxoxOR5\r\nPQbVxW3mDgSn0SKYAi9sJkJSSlrFHSu0h9eeCr1l7QOjYu1rDxNR73B5vBTv\r\nRArgB1tmzeq+6bu1qXyU/C7/c6JbCeOBBLsno+4TsKVDVBVwSaxwfSP5/A9E\r\n3BFgkGWmr3MaAG0RmAxFvM8KnBwEsW5xPFbA2GpT29r4cygfNi0YdfLO1NTi\r\nBDtlNJDf1wGLiwHMMGw1SKIuarA1Znr4WEe8jiu2XeN6Z445B8V+yowTRTS+\r\n2GTzLrON+IMK48mzlIqMfB38ujpY8uSaGeU=\r\n=p8gg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.6-93452.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.2.6-93452","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.6-93452_1663275295272_0.3832410502883159","host":"s3://npm-registry-packages"}},"0.59.2004":{"name":"@fluidframework/test-client-utils","version":"0.59.2004","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.2004","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9afbd7708d64d8ce5fec13b7b54646f77a8d6934","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.2004.tgz","fileCount":34,"integrity":"sha512-9jqD/Mt+P/kZ2lKHfQp8ebQy82hBesBjLYOiE/UGOKPN8mmFkH3a60L6kJ01CPSM/fkJWJnqIHcGfi0pvXic0g==","signatures":[{"sig":"MEUCIGDkXW9Zlqe4skQ4IM2kMX+YJBn2zty2/lpEPD9RbwZdAiEA5BSc1YsD/4xDp+bqOi0Lx+wvwVQYIttGNcH8/zi3f9k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjI6YbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoALA/9GcIF0C2VbmC3ddvhRj5mKjU04fuwVdFuQfDhh+qbfPvANjBh\r\n2MV0D2J5JE4q8SdKCOI0z5FNGJMM3iHRuSnrm+sM5iYAJtk2XolJ+K2kNXRR\r\nR93u4C6CYehwJPKX/ujveANza5zTgjDZlFB7PuIb+PUgziZZ5SoEq8X3Dwq+\r\n3q2ktX0RsJ2E+ArgdxYcph7KxlQS0+f0R8IMODx98pen6ykdKgn71dE42R3x\r\ndPVFMBH+TXgLPbAKUETlNazERm3q7d7xPGKp7pezjyObxnq+CUylw/AVDFoh\r\nmIgVAWEbf7YsOOHyNv9lOg8xBfKHxP9uGL1r5isiA8PGj6OlyEH8RIxHJAx+\r\ni8Oa7heOvEWA2qh7vYLH/KonZMJWgObFbpJQ9hMRcu9HeTz1Y9ZfPIzIRx+n\r\njS+q+4LjSAXzj3JtfhrxTkAhzfhUz0SL9O4Ke3VR7eLjALpC7Ue1AgQi9JDC\r\nLTOmof4wjd1LNR6nnWTKrEXmNFKqwwxpHvvwkewrPN5m4E7tJdC3Xkd0ZKGc\r\nr6V64okoUiQcg/IhhVckc2/FY+XtQ0fJL306J3/bgJcslKGWkGOFNf6l7f4D\r\nkKpbUjFATdzMxWX6eSZ+tgM4wm9YV2s2mLclyTTXdK9rMh0sLpf8unaQRorw\r\nAAqcohZaHLtLfemCQSyVhhGWrHjdg128WJo=\r\n=RSsd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.2004.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.2004","@fluidframework/protocol-definitions":"^0.1028.1000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"0.59.2000"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.1.3","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-common":"^0.23.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.1000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.1000"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.2004_1663280667161_0.4984664635019602","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.1.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.1.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.1.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ed9ef32250601b6fc6b31da8861836847a067ba1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.1.2.tgz","fileCount":34,"integrity":"sha512-dUGPCU609yE5tnY6g96kqy7Fs8hMq+GIjp/ku5wqporLZwoPlYglhjc6rnuAIdledcmUHlkaV3fMCJjwTefFBA==","signatures":[{"sig":"MEQCIHjsrlB/lHliniC5LtSCLvM5VuWl9L82eGE1JdcCbH85AiBMSV4QJtnLfxEBUFguiyodh0PyleFEYqBpjUnpbBKSfw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjI7/tACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqdyw//fAw9FRhJzm4F1yog3Y4RJ4ccLeqPetaMsjPANoRweNyGoAFS\r\nAt4aDkILV5200GfnyBfuZKZJA/mnW+pDCejgmlxLgQxtoJCxcptG398AENef\r\n3lcinTc1mxZeE0Dzys5VAY/FWEZFFVgRbwshABtLzaqPOZiT0pCG7GrlS+/i\r\nj1dNCFvI7H4meqxEBf39grQJjFcx53aFZHMmelZV1Gn687EQzgGXZ2vqI+RD\r\nWlmcKzhcq2hbfsCvzBj9BBTZJI7QjAm3vxoXFtX9fDZl7yLOQosRefiiSj3W\r\nYbIgwfT55ykfD6t7u3Gv+R6I4tc0aTB/Ne+YWeFIGach+ezXh3I96UjEDQ5g\r\no3sD0PHK+ZD3ldC5nj81T7g6odqfcEW8uok1z5fecvlLrk1cGLaNy4IeTzTl\r\n1cnnyURf9ZI42xyGA5mnbCLuzuSeVX22iLfMZUibazhzN4dvprA3YaDmhD/M\r\nqSEfaMx32F6Sq25dW1fvLfrPwkxiU8AVnH6B8n5NesqyKbXYha9iMtvlSwrs\r\n6EJy1FYi5qh1Dt7vgZWLWAkicacHXVkccrnW3yq1VhItuHGVUzH25f3L5+7U\r\nwCvzXXBYCu5SOeBzcQsRSkAgFBxavt9Q70hOcFTjwqoDghbRTlPI9qr459tp\r\nY4/U5phxiouo2iSv/2BIq6zVBqAQCCMyUzk=\r\n=RlUM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.1.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.1.2","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.1.2_1663287277689_0.6197320593326279","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.0.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.0.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.0.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2f68de09b6ef6e55d17cebc3a19481334562d6c2","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.0.1.tgz","fileCount":34,"integrity":"sha512-ZdbQi4fwCjUgTIBxI6sFtdvzsjF1G808VnCUsSHIL3JN/os9IsWJEEnbSyWaQMhesrMtCIOYNnYrMZ3GGE1WBA==","signatures":[{"sig":"MEQCIEhYYk26bv1VMQXPfSw8iJycdM+yNYa3gW/oSC7vk9IQAiB9dwT+s7/yFxQIVFWNVPK8I96a5r4oeSh1lVVUBkqlwg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLPHNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr1+A//ULZEd2EaXCzEnLqlmI8oXGo7WALxRv7s/pxugdWgK/uvrchU\r\nbi/YH0V72dzfA7LnupMteKiUH3zxu9MG+r33bKV1jY1kZcGxPyu/22baeHz/\r\nmKIXe5+ZycZ12QUeKpUKqMud+3sDywJvJOwMI2y1Mw+3MwGjTvL5ykDakqy/\r\nV8v0aZzvFzbEwYcCWQICL0dkqE+Te4TUw5RR49oJW/7jDxtCu2tGw9iihXZ6\r\n/QmiXBDzmRtOE5kcHFa3Hf+fv5vvD0WwFGPH9uNWL6bjJFegtgK476n2lGI0\r\nne2/h/ssyeGvyF1UUQHMKv1cpzrfFrhS4v9F9iovCDmlt+hzWFHaf21v6A3c\r\nUJxv6H/AIQyPwh0o723AL+XLOoLR700fsGrH8lay2IoQxwSG/facunAlSUgS\r\n9aC3t90Yx1dGCIYZhAG13+UkpZXcpvCo3EEuYBD2M+zc5BwYNC2xp0vCyi+w\r\n2IeXhBQysbyyD5348Ts1czyvXqXooRrUThHQQiGYg9ZbBChwi8YEr8ND5N73\r\n9fu/QcAAnk8h43yWR2kmaX8riFO3r5vPaf+0NcHIeR0P0PEFhPpG4xT9f0Re\r\n0Anvst+JmLhvZJkdjCUZHeONSDOC1U4iE+dvxUNvD/eD5FW5fG9Dog2DdT+T\r\nPdgn7Sm4dtIZu3t0BAnzpcPug0l2pym9K7E=\r\n=D4wQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.0.1","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.0.1_1663889869327_0.31703739240520745","host":"s3://npm-registry-packages"}},"1.2.6":{"name":"@fluidframework/test-client-utils","version":"1.2.6","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.6","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8a4b7ff030e70f023290f65e56417ec688f8711f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.6.tgz","fileCount":34,"integrity":"sha512-tS+jBEEeiooxRjX8OlMxmPOvF+ir1d8w3Kg+OZnpfVgLkGOBMto07uEx0b/w8UttYxzDEgPzd9U1a6Ht5KfSZQ==","signatures":[{"sig":"MEUCIQDKJss4RgV4LmkDdinEmRQkZX3rbTeaELWHgG+FoHSSCAIgFHGkpm0CHAQK/XtVeus9jCFzt9urxuIXS8QOUfyFQRc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLfTBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrEJQ//cjdC4LiygTLWjGD0ewFHQjdlS2oj7Vq05RlA8oQhW6ZXDYUo\r\n7M9Rpo6mp2ThVuPVs6k3N9avnIsEpcI8y3jvBAcyPFbRukaEripZWAwryfir\r\nIZ5eqdDlx5YIHNW92CV1LqFNgrL84P5EcB19Vg4AK1hbTdVA9no3VT7nZVxO\r\nALgq3lghZYpLHood5HFrloK5CeaaXVxsQvCL0GyTzYSlF6A3+c35nrdnOs1I\r\nfp5VkvjggZdo1j/yw1Hh5etb/5YMssZt8eufHASaRTS4ps5TRS7pWStUZ5Vj\r\nWkQAv71vtO/aKCpgIjs/t5lnEF7U9dTw02wNVu09wucmMjFffCBrMtEKTQTu\r\ntDMqczod2jUvJ8j7qHLnzNwNBf4WZQfObsgjqcAvzr4tMaLDJW9bRP8NXypP\r\nR1+wiK+aUCn/71UNE8EgePUkA16noBzo4ohZFYeHY8BqF6vabrRsq+03PcQm\r\ni8Wp92hLSPWvrGDStRtEVypYayf8OWFQigE47ohaxsr8Rz4y5j8QkR+kTnjU\r\nP0cLZsdgOepo4R/EkwqThm6GPhlSK6tqIJR99gNft90VY+OJoUKCquJVJOV2\r\nfmMjTgoKThdM2/6e8LMuPfu7Sx8C6qf0dumdUgOL9rzYcLuESkAp3SqgHzgM\r\njVEiyhXgJfJZereiQIQgt7ZrmUK0cENM7SM=\r\n=/cIT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.6.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.6","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.6_1663956161674_0.3559920138307666","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.1.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.1.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.1.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"bbfbb34e2c3ef8b72cc2cfad7971a2f19d056056","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.1.3.tgz","fileCount":34,"integrity":"sha512-EkXVa+tJwET9pzZgViB2Bj+a9pg6Izs8tT4kRqaK/kOzzRlCDV9+c0hStwW69LEuaLYEH1pyMl1UsI33Da1ctg==","signatures":[{"sig":"MEUCICdxOzFlz0eZLZNrFIJC5Q9YZ278IgEGLgaT2TFTjHHZAiEAtWw/nQtYI66bGnno3fcAeaJs5HVoyKe9U45B5u+ei+Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLipKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp3ShAApJMCeqc/eSLVEVDKBiD64YX2JnsZ8S+85OSCJGtuMQiXghpX\r\nI9HCZvQuqBPn9GCMxiFPv/0Buu/1y7T1yljnXKDwTIgQqhrPxXibwBTy3tPP\r\nQZYPpw9OFvq4yMpN11ZBMfJgtkQEXwy6iLBa/VMSKj8pEUTo0F06XL3Aqoyo\r\nvlKvORWFq+tdRdUA1eEq3UjQ+0paWPLSR7MwOb6w1QSCb659XFcVWWQrU+Yq\r\nEvS3SxY/YRbeV6Cl5cS1TbgGZW6V7cpGS+NWO1ZmCzAzGsVLBYUK+ar3sAIX\r\niSQzelwMuquilp4FcZpPZH1hWrbMZ5VIFHEcxIYCj3hgYvSO5pgjCwu/8hbw\r\nm/r46WX8wB3pSCHXhDxn6JXbrpx24zMNT9+33g5kuoPCUMUHNvmQTWWJU+7A\r\n1jvFyy1h3MT9MK/ZD0lIlkk50M+8SygbjEoE5uKnBywVjrei5FHNd5PeKbg6\r\nZUtSGe8HQ/s/optBU7CJji+9EIPzBcouvt9HsrARi94guryAaknpcmJ5Aj6T\r\nGwtVBnZXxzXVA/KK//oxnR4yQun5QVHuphn5CH8IOIG0cLTY5fHqJ6a6NqrH\r\n84v4u49RoZkRDWfUfqBRVA4atBIugy/QFaD6Gy50UcBJ5MXkf1yjhOEsztG8\r\nler4qn2yzz1vTShoOaFVVSzja4WVicjF638=\r\n=FdBp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.1.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.1.3","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.1.3_1663969865976_0.5686953093245923","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.2.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.2.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.2.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"62f41283c30776f6213a908b0a5c32f1ca9d1207","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.2.0.tgz","fileCount":34,"integrity":"sha512-RAkldQNeATo6W03wMWaEmnNeAgVoTQyo+F9Z1dSFODA+Z1riIKQpbP5OgtNOPR0NcX/pK43AII9z+Hg/lWbdLg==","signatures":[{"sig":"MEQCIG75GockmNG3/JG8HggFne5jq0UX2nD4bDhkkVg4CWRoAiBsBHVZfXLQegfYfclSMoKP6tyGg41xgyKFpADjUmH/yw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMgeWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoPeQ/+Jn+LeBh0WG3HuBm5FcewYEvmegYHz3OrFsomkM76x+Z7gGnO\r\n9LTuBEVcIMOhEKrZEfPvNF3iiwVtvJJCnC7kwITznR29uCSJ+P/ttRKuymoz\r\nSTS/XkatjbUb8CntX5wzToB0Q0I+cozNajg3Vj0jqgEkOAARmo9ol3y7RAif\r\naDOS6agy8+R8rnhWqa8LxxjupW8DcI0nz86kWfqTxgvaQYbk39xylTZgbcMF\r\n+qCADBjSGe7Jvyj4RBqIJveZFrzFB/2YzcmrIPQI5M6cmuWBoAtfr2RIjPIP\r\nb3PwhQ3cPtlzHNF3/KFZLOW0De6i8pT4E1laj9FO4f+I7SAMD3UbF79Et6jB\r\n44uTXupasgJZVkKSnymQQywfFVnw7zsBpe06w+MTAAnJMnnLpihmRppqSPET\r\npQhjXWgPBltXlGFvKT0q1g2JorUbBuov4Nm+ipiTpOPvuWup6TOE94NB8JJ/\r\n8bYEVnimBuQ/eUzasoBtvE1IK0YKNOl1VOYun/R0gjFLVj2goDEd2atzKPrv\r\nuoEG57RVek9iaYPVBNAI5tpy3LXYTqycw7oz/4xR9GfQ+kBRV+595AJYTnlm\r\ncFnddgHIV/xiiLUctKOrDdWDGRmgSmdlpi0YAnn5WtR/3qhUW+obvO52nmM7\r\ncLEOu/cU/OxiCQbUtUG0I/1SciIiVcy5nkY=\r\n=AMue\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.2.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.2.0_1664223125852_0.8783279069724386","host":"s3://npm-registry-packages"}},"1.2.7":{"name":"@fluidframework/test-client-utils","version":"1.2.7","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.7","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"856d7dda0d8dd9038ffeb06b99841ce53a46d618","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.7.tgz","fileCount":34,"integrity":"sha512-ORCY2bG7IkVVR7Ud73lHfjONmMOO8jdfKIC6YxUwP5AUvCaTyrmzCkJkdfLjEGsLDuVocUBf5lL/G4Ylgz9gHw==","signatures":[{"sig":"MEYCIQCT1H7qQ5xKjUKjhqfdIqZKl3Y0NA8+xlnuxBobR4//xgIhAMWE5pw0VLBloZm75BCcQDMCPJ81JOjjl/EVZIrTanuB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjM4n4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoJQA//WHKJ2ababkGUEayHDxfXFttFjw/Tlk6e9EEUnrAw6sGFXS6X\r\nZUE0Fs2G7sKkl6VAP+oDjk6fqYIPJyNJ3PZZaTTva9J4Ph3i6fAHZwNS+2dZ\r\ncb5DvbTWT14syRnzqFF7VA3D+eowP+jcENyDW0R1GTejjaBX/mM8iMyF0T7u\r\n4b7JUuj+kWw+yeg3bL1F2dSpGCX3Vuyuq0CWNqwHKjVRz89jftYkBJ2m7JqB\r\ngUS4GP/uptXCZCSTuVxX1Z1UDIcJyi2F64rifBNhqY894VR6Ed+FAPm4LPCr\r\nxKivdBgYxPcAYZQhs4VJ7s5n2U7mvyuavSG28F3Ue2u5gAxk97Rys44Vb7X2\r\nH1WJ5/y9KAbEVgMW+uloUiUpHjLbrzuR294h2QtJNMH9t4bUw4plQGlCcM1i\r\nmcAz1+fBwG9RCTEMdRAByM8nYTRUwaN6hq1e+SkYsv4x00dJmMgyURjGhYby\r\nEsc+OWFxlU0nM9y285WpqfIv6P1lNu2vh+UpHrX/bIEkqtxMPfwj8MiparYw\r\nXdypgDUA6JFn7GWgzdiOKR1X6rCrDCDGzdHEVDkF/E8kIAnadvxrNxnWKRLK\r\nBu3rZRAgs/KTF5D0z4+cZTczMhkm3xyTdixbYSzKeFaG8QJ4har8bWSmUR6l\r\nEhquF0oDE6vzEPjbI/oXwM7cz7nHK1Q5a2I=\r\n=BrXd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.7.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.7","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.7_1664322039836_0.5916172820098076","host":"s3://npm-registry-packages"}},"0.59.4003":{"name":"@fluidframework/test-client-utils","version":"0.59.4003","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@0.59.4003","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f9cced86665205c4c8fc9c356d44865360f59d02","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-0.59.4003.tgz","fileCount":34,"integrity":"sha512-5CiYM/sbEkcX6SurH8pZeqH4yfYU3jcb+FzdbcQgt43+vZ5+lQIIm2TbMcK0//sABmHoMB540tQ9oEcorl0Jzw==","signatures":[{"sig":"MEYCIQC8uMTCAcVbWcfofuTiH834ufkHyqu8tttFgI1OIBPZggIhAIVTgXandZysrCNi2g8JMLQl6scQTEDO7fZCoMMl1hVO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjM5LBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrbRBAAjUCOnKINbvvuJtRHpiYhG/jUcuuUL5KVF4fyXRjtZuZGmJlA\r\nrNfLnGzsuUjERaYe0Pb/K/Mp8LrwHW8OCACmL7pW2R4tprOEPRE12G1sQvTO\r\nOSqS7Ikia8hmRAyKNXoev7mBJJpkfOncFi92yeEpHWbwtLpbGHwbKkhirdyV\r\nj29Oh9BtdxCDbLMfdnGN1DlsVj0Zb8UQphe9wQviVsybq9LQ1HYO/lS9S98N\r\nP7u7c7IvwgDSRaAWYga+hJCRc5hd8PGzQoki0vIKB/TYgGOvfUAEpvQlLUhP\r\npfPZgEtneSCiS1nEWZYbTaF1DGnzXQbS9xKF+1UqfJK77pEzsf+PM6Bu29ji\r\nyaWkZgxgFi/85NiShURjvjBYDzyUAmmbYelLHeZ7z3AEOqtxKejowqe6r1Jc\r\nbARQY6pUqpHezwICHhA+kVUeAtRh5AyElrn082+naDTc1dAL4M53MAY1VEtU\r\n0RCCwhsDS0c+xjHVyCwLW2qtkAFSvKYVb8rFj5xvysYeBRoqR4ZrZe9tFnjr\r\n4p6czljz9gkgQUXpUw9Fh11waWJoU0+jxqOsinANwtPG/8BOebFXB2wFA8dT\r\nN4sMD3aE4PFllq4w6TTbDY8Pl5ltFfpQ065ZKUIqDPa+6EY+MNqQuUXJJM+V\r\nv/+8gpNjrbRLmI/EWdtUMC6KZ8mazLracrU=\r\n=jMcn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-0.59.4003.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^0.59.4003","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"0.59.4003"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","eslint-plugin-jest":"~26.1.3","eslint-plugin-jsdoc":"~39.3.0","eslint-plugin-mocha":"~10.0.3","eslint-plugin-react":"~7.28.0","eslint-plugin-tsdoc":"~0.2.14","eslint-plugin-import":"~2.25.4","typescript-formatter":"7.1.0","eslint-plugin-promise":"~6.0.0","eslint-plugin-unicorn":"~40.0.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@typescript-eslint/parser":"~5.9.0","eslint-plugin-editorconfig":"~3.2.0","@fluidframework/build-tools":"^0.2.70857","@fluidframework/build-common":"^0.23.0","eslint-plugin-unused-imports":"~2.0.0","eslint-plugin-eslint-comments":"~3.2.0","@typescript-eslint/eslint-plugin":"~5.9.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@0.59.4002"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_0.59.4003_1664324289176_0.00205904172539495","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.1.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.1.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.1.4","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"3635e62813087fc098a4dd4696cc640bb4ae195f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.1.4.tgz","fileCount":34,"integrity":"sha512-qgBFmLAx1+b4QNmCymnsZOoGUD/8s0LymGeZUT0kH5YdTbG51/2PO5n9HD4nHhri7eVc6NGHwWqkpYYbN+AC9Q==","signatures":[{"sig":"MEYCIQD3BcMbjLI78tstCc+MtX0MaU7bdoU5rgnqbRrivoNlrwIhANPxGaGDNJ+vL5JyIru0dMFT0icthQll56EB4bNgbYMS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjM5TTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpwmg//fGM1L0na7+Z9eNQEIaizb7MIEvdIEN3mdxsH5cINVEsdT1in\r\nqSZEK50unQfR8+fPcAhssHhndShLzbZ+SvXZ1xipMb/TONOLejCzRrXd7MDc\r\ntw2ojiKOHfldD5YEQ9cdOyu9ebTkzWgZhmof0O85vMVV6eRO8FnLJazOysLb\r\nHnND152IljGQ3sNx0GO0Ucvf/G21/tu6B6jm7GlGanh03ag3J6dxZYz2qJLm\r\nFTQ7V6UFtf78CD/YKsCMYdVyftBp4e8Kvuq2f60DsIC93l/d00q+auUiVHrL\r\n2Z3dD1hMjIxNHeOyZYUjVy3HG6hjrF4+n6+eciTk6aFnoLPuasybHTxhltBI\r\nvlS2Df0nWcA7GH0FEs3MMeZ5NlPiAOwolR/S1PJw6Oo8TMqvaWZWS+f8N3pY\r\nG5NW2rF/gj5pI7hRTgNJW/1J8ltXHxMwLu/tvkPOqaTRYBXCu0+f/j4Gewkb\r\npa6I9ViD9KTFvOZYw2xs3SqE8ApwxFI/I51ChIMthhALxxDxSBA1EdygpE+6\r\nHPm13/3edMRpytyELwoGyUGujoX/5E3Spp94iTXO42GERYy99muILHQN88Bw\r\nC32sa4AxZmi2N7oZ7K2Adh77UE33jhXgC42GNNSpKMeOBGodHbP2ADwsBe7R\r\n1boIe1uyG7Iy5aDBufRSv3ba4yJbTiwdTD0=\r\n=a0Zo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.1.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.1.4","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.3.1000","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.1.4_1664324819593_0.8458384972342561","host":"s3://npm-registry-packages"}},"2.0.0-dev.1.3.0.96595":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.1.3.0.96595","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.1.3.0.96595","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b3fb4adf8b1baa9c294be930f52673593b0ecd49","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.1.3.0.96595.tgz","fileCount":34,"integrity":"sha512-XATrYdyy/dlulqMdApEY1vzhH8O+KShTP0KuCIgBtENqMRG8uLMCM0B1QuuA2YKG1GxVoaqAkaU2matCPyzUfw==","signatures":[{"sig":"MEQCIFU5LV2U4h2bxyg2zKwowXQrhSjHDxnVc6pHAamNUS7PAiAiC1rGd3Q3gYgbKINRyAbNyNztqi+1qyqLVYiVafhLXg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjN0ssACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo7RQ/8C+YPLuTAw2I3fJeqV9iSubXFizm2cC4JwqbfFLG/2cn9zJCb\r\nrjyAsOLYnVjaJAjD+9tfIM5+x3Vr28lPb6VEb3pQD40M9pPTuVIqowxqBFJx\r\ngUJbAkt932NnDQq2qnfMrBQn64sOmzpp+wXtaNWaNj1tY1MSU7jkXmZuaCyN\r\nlarPfYa4v8EcbX9tDmDyQ+n/TGRYHulIYBpzBxcBLyTuAJGsOCjQaDX20H+L\r\njg2MZkk8mykPYNDn5ONDrpXVV34VUNqhRSorgjTqjeD2Plw0Y3FzUS+V5HWH\r\nzjERR3FtLekcjrva78lQ0SJs53LkOpE5H1ncTg4x3C3fU5ZaxLsEOGAYnRCc\r\njlZaxMoHdqrEqCuvk1JSKkW1217sm0Ds0SAptvrk9LvC0ydcsgVROvZuv5kZ\r\nHDVB4JSyDZtQBIpeQtuyDbJnsQFd10VNssaWJIzcNeWuLkwk0/R7bzbfZmEi\r\nZWhrQ65FTCh2AoA5eI0C5LuttafPbIV2XOD3eJEFhLlvNbIx5WfWcQJTYz8r\r\nHCBD294DWhyf53ONDvihMqLGaRT+1hn+IOOYa0HozJEBLYxvfX+1x1ap4JuI\r\nsEEMAMIcx1IJfq0MjnspTf7SchjOoQhFhw1ihZW1Bou3dfbd86W6h2VAS28i\r\nUmxmIF0R7v44OPhQK/4v0tmvjDhbIpjAIWM=\r\n=EVsb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.1.3.0.96595.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.1.3.0.96595","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.6000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.1.3.0.96595_1664568108067_0.4191633311802079","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.2.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.2.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.2.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0a45c4fd455d2a004cef57ef425a967fbd226a4d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.2.1.tgz","fileCount":34,"integrity":"sha512-5Ibsd4PhJW8qxKYjFNye1Vx6IOR7L2VWLmimxNvSTm26PmHgW2cSieTiBolSCD8ssTj0vXaUj9VShSYkJ5hECg==","signatures":[{"sig":"MEQCIHF/g5Pm1kq6rFjL2Z2KYScCR8lj9LQI1oFXYnevISp4AiAuwqJPGiLBhhT/awKhaiA1FJ/TnC9kIntxPb4aujYf/A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjO3S9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpKGRAAgLTxb0nvFJ9tw4WJXksE2dimQ/8eUNAn82h44s6+dB5QmIpM\r\n0hSPLOjF7Uvn3cTdla3kb2g7rG/LrOsir41yWORAOLiaCiYhp2XBQ1LPUfFl\r\nfl1hdxOEW7dq8AwNV9IDaOr/DM1gyOTdX2FJzYwA+DSQpDL18BHDjtOhBgq6\r\nNyrNO56ThbZ5CDAEvXnI/JV9rfsl/iamdthCNwOqGoAa/Y1ktDoWaR5g208P\r\nAXImRHrY7tb+gguz54b5iBARClb7GC2qYfY7Vqjn1Wxi8RJ/xUQ3K5LtLRsq\r\n4iae9mMuX9AlKmhoVVR05QrEz2Zz4Fdt0lOxs6ELlhdn9Kt7xaNb6KugCsiH\r\nD2dPnkrnFOZwVKQKSXdxqCYmRgp+mCKfGk04CHKs6ptqN3Ui80eTCyg1PGHE\r\nxhYiRUehFE3wzns2t8xdp4IFvmzZE11yl4GCNl5LM8kle18jhfAvlphwG/gZ\r\nTTFFueJiGmE4ioPSPaoY262kYxcnyG7vriqhHY40ZEwwNHboauNsmor94JzA\r\n/iEBtyEd6fUmyqbpHWz1wpIeteBjlx+cn9NmPfaIO2qeRCQfKQVVWQwSe7Q1\r\ntCRF4RIFnAAa75mprRYa/SBb3ZM4LZwH4IL3fhuueRDCrQ+HsArRSxRVZakZ\r\npDJ3O8yHOpaFDvndCS3mr7GRpQqUc4yci3M=\r\n=AIAr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.2.1","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.2.1_1664840892900_0.8445485550828187","host":"s3://npm-registry-packages"}},"1.3.0-97515":{"name":"@fluidframework/test-client-utils","version":"1.3.0-97515","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.0-97515","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"02a47ddb72994dbb039cc6a2846f42846b1e45e3","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.0-97515.tgz","fileCount":34,"integrity":"sha512-CSnf08Pn2cDBQPAIbzGGdbWOVSBicLxSNO1xbTwOpeHA0NEA+sQmelqLsCCsDvPuuhRG8R3s5Fzq3YLG+YeG2w==","signatures":[{"sig":"MEUCIEtRHn3Zny3y4SdMvJR0IieBg2pP4PApwkyIHMei5Je0AiEAh2GNksr2ZxTp7CFMcZnb4cXlyIz1UYgOiD6eJImI+L4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPL5XACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoMTA//TcHPHnsVvPo1dFBO/WFiaUeBk4THHFILFnfFTHPn86gwt7M4\r\nLXm4mlX6yzBUPoTDgcKTzNKpPBeL1I0bE8pu6ib44HZ2ELUgerXbd18FEZTy\r\nDMYQiFGV8MHD88WpZyMREGTUakmyfX0ekpZGEeyGEUCtE2DrIpRF+bLB38dZ\r\nFZGv1u93voJ8YwMx6y4nex5PfHcnaC/XIAPhsfeS5/WrXk/Av3O70HhLsCWG\r\nyafc0zqUoPAmhxooCaMOGLrpoiwgKvIXMUWw0sgC8FJcAEzbrP7yYaNYPOul\r\nAt06HwC4XXuv+WH/TefLzY/2HbT5WPNsn1CBF6FlzaC/5kqoPg3ws2wlLe4O\r\nyPL55iP8Axts6lmJY04jcBkIYXRW9lAFrV7sqa+DBurRT5ZcnOZxoyuj773c\r\niRhia1K5sitg4gxjkt64BvyELdwcZWt9Fr5k+iLfGv4qCOXwQUFf4gFH1G+b\r\naiOh1DO4MEdHGrId0y+Mzad3MLXbdVEeAO+dGMMMXDlnFBvoFwj4xvWH/gdl\r\ne5KE6w2M7Fd+8clWy3xYgxvXzFxAKcZX7UYij8N/TYIqMzlI8KPeLiOih479\r\nPbJ58R9zLrVw4rR23xpqNeNWRgCSkSJ0nTOW29zInZWL5hZvlwgmsO30VHE0\r\nhGafXaslW9HmMzJ6MjejndCdYNSmorp3uNI=\r\n=7A/e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.0-97515.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.3.0-97515","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.0-97515_1664925271386_0.9285663536935149","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.2.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.2.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.2.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8c82a0d282ca0fc5f8670651f1c7aad33fe0a952","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.2.2.tgz","fileCount":34,"integrity":"sha512-+rMK/5vIhTgNbAUSxyZ0lf4k4S2yLz0E+It99PSTLDWgELTLm5alMNR9FJrVBvjqJyvZJ1uYY1ZkV+k+aNhkqg==","signatures":[{"sig":"MEUCIQCXjv4oLhdnzXUEGQrTajx73ZBm/GbVjKcBKzDaSy26cAIgbO2UtYri1Vamrwj0e2PMasxsCMegM54meLUvrFvvk54=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPNbAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqNTw/+I0WceF9HF/6DHtFwPOZMSyyJEPoCSPOXR163A2JBCVBwbWvo\r\nyYCu3bUWAPwS8eOGKvrJX/UQzXRRHed5XfaWzY2eQeuAUUAhwmXkLNCUPM3d\r\nD+P9UW7V3qjwBG1HFXdVf6x+sNaySkl2VJp7B+FsB0pauGE09b8zbIyBVkBm\r\ngmw1caViX+NUcBHJAcdJB0dpI3a51sbsxrKKvRpKT+lCLt/j4Lcs5fyBRH8o\r\nhMpVX0rj0tM6LnG5zWZZDarkyVW4HjSqsTXNN/gmoAsTGPEPyZ+/E6ZwHaKV\r\njnZHlCep13H4NzCTdQB1QyaemOHssMbllW9L0qDQM1knQVMYOYoJs4MoiVGN\r\nCH2LTOXNnmimJ7kxsD9qeODMsDIlXpAPvdi3sDuUd9WR6zmZdNMh6Wkc1mwF\r\n+zq+HwEuRvJSP5CKv+0yO0tfD4YNd9IztrmXo2zT+gR5UvS4Ib7E4Ijo63SL\r\nBWV/lNEBz1lFRzdQGVHgHHycc4nskrykEGWHL632Obmu4buBQnmpUtrRQhQv\r\nkbnGhimyc4UoKkhGzq9+Ekxo5R7TqC+El/XGviQCDsa4MWYAAt9ujgz3SMty\r\nnsDh2ZPbgxTxP5z4edmXLXXrGadBwUnSYzCrUEFqPxUpFVUTIagUAaplWfsw\r\nbFF1qI5amkjDSB27Ikj/n8qfSF+W3O2KZmw=\r\n=7mtc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.2.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.2.2","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.2.2_1664931520533_0.1299636228048986","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8dccc6c7962ad7f0d2e1c97455a2542dbef1b17a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.0.tgz","fileCount":34,"integrity":"sha512-mVcLGwn82HmF+6VnDumjOmXgTrfFcRaDZV7zX0F8tmBv4wWSYFYq55gffGpeXVqZydTyinWJKz0oB0fP61LmwQ==","signatures":[{"sig":"MEYCIQC8WyIF2XuNP0L2hiGqtvDTPFLkuzN+FO9cl5gEzHtdDAIhAO5lYmBte3/CupXT5LkDqYns6J5iEM6jjmIyKqAHSqsb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjP2EwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpgmg//XOl+kfF+AaFl4NkUTZIBbgzKThNAFrUEz1burWENyyDw3Fn/\r\nmLEiu8dsxeX/R7L238Fzk9Jnz1vSpenxg876KrYXTxetjB2Ej7k++RAKqlhU\r\n2yxVm6aF2kYeT/i3vTIVHv+ohEutXTpBhkNL/6VHbaVrTjBL9x/Al8icCApE\r\nz4qEYUWAz6lUWPbvQLWae13YmWz9lV5DIY+75odHaYJsWyUdsTO/ymP2dNfZ\r\nm+XD/TY+hMCEkPpC6p0b76P4Q0ut4Q1li1f87XDHMCq8hzKMxYBxubkr+dsT\r\nQN5XKM55XfddhdXkxsepxk4CGc0qpSil/k37tQLHVAMWOxkpS1f4wbb+XXkK\r\n5dbKEcRdv2o8Koee+tC/o0kacL3LFopirtv1Xz3zC9Kv7vjSWDLedU7JEIRV\r\nV9/waxp2uXHnSegCkaY4OVRP+7pgG+z9Oo29HYDsFcgSRxl8eP23cnJbgpQJ\r\n9NzxQjft3TF7YKiQH3eUdNceN+3QmmvA26rRtcv7SqFVXG3tWNN7OW7TFK01\r\nL0F5DWg7Y5WXIpI2V+GEACFIB/W2WubgpEo9oCQUO/OR7vMR/OTM8FZqi/ei\r\nxVyel7NjcBkqKUNLa7R8RjRdMKoHgO63w9NjPy6z+9AMLYKr6Lj21OoQsuUO\r\noFsTEXTdop3mewV6BP2X0aA21wRoGAVlImw=\r\n=p/qh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.4.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.0_1665098032479_0.9415935051068152","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b8c453d9e39b98eba900ae48136bc4ab09f6fd04","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.1.tgz","fileCount":34,"integrity":"sha512-mloVaYxN1Vj65YXEofjg80ycEn15SmligxIE4pk12W4WUBbVGv4DtdlVBE/LbHI5u40QQoLVw4aZaPnjhjtfMA==","signatures":[{"sig":"MEQCIFZuJLjBVZS6sdWI3u0bJx6IdaV7IkkdWtMr7eiWAKRTAiAb9KAtzmqbQ/XpIJ6mCAHj8bRCJK7oFZGRyjZEwRB3QQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjRIrmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpuDg/6AqmSi79oQc5kNgEDpuqivGQbnLk9LaU4aLRcqobK0RGf1k6W\r\nu1MDCWlDdnL5ft0A+Fq1B1/3vZVnZC7S1ZkAGpV+8ShKYXQk7R0OreJJe4d7\r\nP6Jsa1b0QdHMCmPAdx9PRUjOoWovMM5+bP8LKCUN7LGiFVxyg3UZLgbbewWt\r\nkyfYlg1to0mTLxP65iRhmKZXsf4dtr77YnHmm38i8N8fXnbDKIwSeuLqnKgv\r\nVOqXtL9YZhAww55iKNVHBViC+rSEW3ztO4Y0hPKZtdMqU5YLn0W/Kujyj42D\r\nQJpeTFQ0n9DzwQ2co1aDxb56irmkDPp90XVW+VG13kvGeK/4rq7RlDY1VLOm\r\ncs/Cf0O3aevE0jK2y75OcXToaQUY1rMkvsNKb9FsMluVZvB4FopdKbEWwpIU\r\nvDFIGXFDbJwHi9n3zBoGPG+yCTastvOR/ZdbtroCLf97ga0LcTntEVib+Jdz\r\nUpYlC3X54VrtqacsAHlySFDvpcNdLQFoO5FEwzcYSMdNIj5N+UxGhrtnF4Ky\r\nychZIqsOKwS2/WGIkM7XdGmJZ17htXbOZqprLqfrVKkLUmxvy59aUsqxwLPz\r\nCk/y4e37ES3YzADZCmWsT2G6DsF4XSCzlRkSxhwbOpCBJjNBGnlQWr8PRh9X\r\nk6TxuRFYLhp4LByc+T2tCFm0irsUOFoireM=\r\n=6Z4F\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.4.1","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.1_1665436390090_0.7349681715688539","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.2","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"920ab9b1752a4de030fc55099c65be0f7434a8f2","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.2.tgz","fileCount":34,"integrity":"sha512-WcvEbP/eOX70KM7EpzB7sR2Fz66qjtHNZBNdB+7JTTGyUyTGd+RoJZudrwRPjEN9aGqkI9gBlYuENJC9/v389Q==","signatures":[{"sig":"MEQCIF+u3ZhQJj4kSvLRcQID0YbomEMxBh07KyP7zDibx5OMAiBbL6MgT2zdOCR8rYQv5zLzAgxvVfGtgYojnG6GYZ05Rw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjR1UbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr+pA//fvjIs68a2kWNLc+TBzziqkIurFLDoDegAvQT5OxWmn5EJbmI\r\nlEkK0ZT3BoLgx99Cdb3DG2ybntvPnRd93ypWhfsYwX/Omj2Iegyg8qhwoe41\r\nxPeIIss2mWSjzkioadEy5vpIo6Mmz7Kg2hjbTc4qfNmAz4FduChAt6IgEbAJ\r\nWDeSHpbk6DNd72PU9jiGeCdxeMD+vYEJMXXM/61iImNrDmGiECmmi833e5C0\r\nN1WjoWrsqrMWK2tn9lffdyjJLrTrSg0Av6HLigtH6L+I69UEt+kxhmnLNX46\r\ni66i2Rckk5hE/XQxlKP1CptcHwc4HCR/OvsiZu2LZ/PxMDEIgVztv699NK0o\r\n+WAlMLGGMuxX3+qCVPSY0INyI74MxjAzUNb7H3o8Zr9fqUbX+P0JhHNfhbW8\r\n7vxwnhyaOrSaPiw5uOsnIho+hpChDLnbgKHFEeCkmGDEBttXoxNSAZwRBI5u\r\nMh6c7/kLDNJG6wEv7epIHXBF/s1M1x4uk6Xu/SNH2/Nkux0lbo1HQrNeFAoe\r\nVFuGcw+fhaMTME0VkjDBCIGob1dYPF0vjSNwLShJ8mj+3VfrXIrKbCtf426I\r\nCYzbd+R215N3Pf/7oLO5dgHgBCpRcgczX4nAUzh5DFRX2rJXlLgMcX+5755P\r\nr7jubQi2W8rcAmwXWsbstN3bNieduiHea+g=\r\n=eeGC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.4.2","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.2_1665619227688_0.9937505751634703","host":"s3://npm-registry-packages"}},"1.3.0-100520":{"name":"@fluidframework/test-client-utils","version":"1.3.0-100520","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.0-100520","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"53182cc7f7e2c6368cd1647d9ba3abf994bdcb8f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.0-100520.tgz","fileCount":34,"integrity":"sha512-+eHhQ57zFkY/nmyMi6HFNRGU5DNOT1zjEyUu+yhq3f6WRryY3neh1sIJ/iKJ4aUe0aGLTeojwgacuGJdjaQoKg==","signatures":[{"sig":"MEUCIQCoSW3TJJXYvIkChCLiwajH4npS3opjRK2rqVMCfxp4mQIgTejraTHfEA28w0U7eX4gjmrtO704oX6Cgx0UeO2/DtM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSauHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo3Kg/+J0Z7lQMk5wf+UG4LIF7C+aEinCLyXvRIYtfW40t9msWv5jc+\r\nGBgxIhNsenmwTOYA5rL8b86H2ur/gRyqSWsLi1/mG6vO3zzvZduf6Af7stYb\r\nLnWHDWgXMp2kOwtzIQJDhXLM4DRP1pZSgMpmMO004lYFdq7W3u+LbJN2bU2p\r\n66W9BtbjOq8lD/2It3jwIPTD/80mOl2G4BcLbSQnUDfofeoLFdfQ2kjiAOyv\r\nNOTJeKrBwH9OcMpFTo5lHqfd+amPGmrfJgN6FW6u7vJJ6NX2CoQmtdGytHq3\r\nvNepE8VAC0LpuO6LDlW8R4v6AK82hbup1tm+bfycUVQPe9T463qn6qMZY4H7\r\ndd565+YLN+FEMKhTNlkBU2dzDFuuPGY+xckQGjSp5QDUyBH3dgUmw9+S8WIW\r\n8LCGy2MboFvO3Lsgoo8J/67tf+BhfIuXB6u5vAy1EN4HvFibdvfRHrPtSlba\r\nYGuWX721ne04r0sYdF3YPG3wyKJvqprnJN1LIePAKDiKqXiQwq0EVrUDIFiW\r\nKNKlO0JLQPt3x62cd4ALcoxuQpr33pbEp2XOm3jbZdQXyp0+/LTV8dXBLK6Q\r\nRBffXjESB9sYt8xOnO8K49HBYyPssIiiQse+2bILuWIzZ8LWoNpG3bf36SLP\r\nx0u9drKmRHvNUDYMYEGZmJLEKVmf1fRe7Wg=\r\n=BTBt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.0-100520.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.3.0-100520","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.0-100520_1665772422864_0.9549140225312474","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.0.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.0.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.0.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"160ab30477f44df53f369a418ebbe5fbbef9b963","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.0.0.tgz","fileCount":34,"integrity":"sha512-Y3+5P3A1Ka++ogeiUL5k2UZXS+2hp0WzPWKL936Ygcj0+ORSA2auGhUdiQ8xtyf2oFXOskuHC49eQKu5kifoYQ==","signatures":[{"sig":"MEUCIQC9jmNsNAJtKi4U12IQFqeYH6DCkCycLmEpm7o3AZK8xQIgXpDHgCT7YJQP42RAKmZIyPuqV8BoZeRjO9n5KfVCZGU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjThT3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpjdw/+KtrofzqakG1GgpvaNU+LY5E6zpEZ/KYJh80xepeo83XpGTxi\r\n7Z8A2FwuilgOz/vhHj+urkFPiRY63Puy9fYGBu3kZ1D5WZMDacH4G8g2bdnN\r\nTkmSK8A5UpS/Jho2X/cNuQOdmQ4WN5Y0ayKjEj8i6m+2A2LDXiHCgFMWUgnS\r\nBPBzMWRykF0fQawPY8bCdEqKEe2fqq37HF6yfeLFsLClknoB6GzfxtPWjzCz\r\n7qqMm+o7oFPapdO2f8HmWeQLD4FkYKwOqdUq1WnpU5Qe6+fzsZ9LI+th1mc9\r\nIphwhtT9uJb8fTip9u/iMCRHwdrpt10tdsFpKQg0ov/G6ncT5YRbA//Du4pK\r\nMfbKD65YnOzUK4bkv/cn1ih2Qll/KiiJWy3PD+wGIV90D4ybYsJkuWc1eKKx\r\nb9SeFimaepiSJuUpg0KaVVkhRvUQ/0IByVrtsx3iG+2R9ihwkQg+Sp4ZmCzl\r\nURwHnWTeyTW9f1BqlW4ETCGb42GJBbvxfS/fuRJ/vmbBqji58Rfg0HsTEQsJ\r\nnWPwkSR/kWHkPc0Z+Z1vaj6meTqZeohK+RQOHFN0cymD8ay+OU7/KR0HqIiT\r\nc/1TaMZiK1aSwdT5btnWc/g0V1aPBCEYJqA2D3UZVxFB2me/QI2mvfL9ec06\r\nlRfxSIafrt9PvgYS5syVliiEH2VyfqDDugU=\r\n=wyts\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.2.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.6000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@>=2.0.0-internal.1.4.0 <2.0.0-internal.2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.0.0_1666061559138_0.2695553564610518","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.3","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"56937b749b74a3bfda9800a93444b40fe7d0a76c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.3.tgz","fileCount":34,"integrity":"sha512-5FFm+7d27DnCQaxxmfF5QVcLqyvoG0ycxxNwBVrP06JJy4rXuDxfdUp+cGkjE08lI/qqb0mJ8zEUXmbf5pxyBw==","signatures":[{"sig":"MEUCIQDfjMwE5ndD3mBMozOZAyUCkdeB/ChJ4SnzEewRAejcZgIgLo5Bgau78ePXMdvuv6x0Cxn5BgGp4QOVG3+rLxcWiWc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjTysDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0sA/9GrYzWXZxGMaK5ZMgNhXCH2pQzJ/ljkOSHEqwVslouQppqj7c\r\ndSBujC0cI7Yfyx8/dBWhqKxCNET/idSivbL0iHn1OQw4nb70XOAJPB/mMqIU\r\nF/tWR791khgSK+QPqu09gs+hV6WnOjPxVW0DwyDGmu8XmPlOdTAwMHNfLZgC\r\ngXDsFNQcbKZt2G3tS2ha7sFOcJFCyTaVujfUTm+O5tevIY/7WnJ7Q1zWNA31\r\nZMkNRxPtAImmKCMFlbIP+mkcfnMdoQSrFbNG5c/f3qTkwyAvRChjr7Z66Dnl\r\nreZ7LkCgtPH06tlZ3JidXJuo8xHuhEC3dbLKuZOPVtPKdMz/yNfSFqmqEtsY\r\nzgfJDExaq+kD79K6eDI6rm+fQOWQb91XLoH30VG762dIg1w7YZ5NM03IEOPR\r\naYVsp/OGBy+j5qaTuwRbHSlAZLOgT6DbCkyJfe773PthCpVB41e9ByyZNbk4\r\nO9bCSnDQglVD7WNijRHhLQjxOGRbmCokT2F2sm3BsEPISymkJbrKLxhH0jky\r\nC+MUWsEZd9WoQYlPPScahGsO0PxFEMrK/sQCh5At97NRcpSnbyRyAMkgPVeq\r\n5Piez2m+GGazIZ9eyUzsqZCGS7LZ/iug80U9TwGiMO109LGAsqw4m7GZ//13\r\nAdqtpPvyJvg+z+LI5bwzFjY2BADh9buc0vs=\r\n=gomb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.1.4.3","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.3_1666132739445_0.23810742140728847","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@fluidframework/test-client-utils","version":"1.3.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.0","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f8e121baba3d88d0e51bb0bf5248202fd098fe03","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.0.tgz","fileCount":34,"integrity":"sha512-8e6n7X4WagHuynqpXGMM7ZGGZymGIq6E829/d9bz84E/Zrk11jXIgL93qWvpE1gqLhckyOeFcmEGajwaOuW9wA==","signatures":[{"sig":"MEUCIE9UhmsaObGG+BDjTxu1PViID5d/2Bben3tuXIY0NYz4AiEAno7Uq30vGg4QOPQq/LxGrCbILtrVyJevon3jZfN+Cv0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjUCCeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmowTQ//V45nlwWrd3tV1npoAGbF9w1LOavrREq4DfZ2xN27i/Es/93+\r\nlw14hkPqM/O5WQKiQ9S/mfLIAj0vN6g024Cg0A7dTrVjGvuE3Ug8uHxScmV8\r\nJh+HJYzTF1miMC5p3SJCB66+K0zXe3VRLOATRh3kuDIwTCmNnVBXOSbUquSA\r\nn0/VeTnU6uCeZ7htebLMZO1fKfnLhBeMtsoWBP+gEmLPy8ngQljzpE6QL39Z\r\nozWR6mZH97VS2alOPjyxhveD9VskPQpenjJyWRFTpcDGflxq54VezN8HK/H5\r\ne/1TZEZvTBvauOmOd+5ttUoG7PUQ8XP5ERrD3H+jcaB+SzZCnD/YsGFWkV4w\r\nZ8585lX4ZN7P1uvGuvSToAA//jcl9FTvc/x6lU1izUYE0wZGYbrMhio4WmJM\r\nUHcSIxTZMwHE0KnG0si0yinaU+oWTz0c8MgjBeknTHFGW35/EpsdC3+rz6HQ\r\nphlyTt/KZoshAb0IAwfGze5S/+eV3NnDwS1xbKxiLgDl+/vqq+22C+wOrR1d\r\nPSwu1enwcAPlo/FemHL80v2/+OW/omxX7dPS+OTD5RGfhUIhzAdUKWIxGMHD\r\ndOJIwn6678o6bkKu/mirSsJiXLiWj60a3V/kS3ZdHUZjR7KdL6CVm4Yfkc2+\r\nU6vDvhfAuLbVIgJQPZSDiYvd9IJf1j7sOuU=\r\n=kzi9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.3.0","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.0_1666195614213_0.13301157262834495","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.4","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e21c8c11ae9d3abd5c80a9e2f0ba2eed471d4e52","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.4.tgz","fileCount":34,"integrity":"sha512-34DZIwgXO8FfD1XH9FY8tDE7pPJTXBhwJTsQMjWT1OM+xfR2CUoOk76KK+0BUH+4wgsfbLveYDNPnsiD418zkw==","signatures":[{"sig":"MEYCIQCQaiiZW8pI1C0uHSOU4wv/9/vXa+59OW/SQ9/CbMUhYwIhAIsgHap7WnSwH/w6yK/cEhVvDb/SWzNTMGobyhYkbg+N","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjUO2vACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpYZw/9GBOvGB9US5kUWEq64yaIfH38xkA2xiw53PsJPZZyRFIk8M+8\r\nlU8+osVuRK1LbBQfqeZBdfwTo0Ex0jG2js5+LGAn6tY3XPCPzI0+7VCTsPBV\r\nv+20SGKd/0VdbMZ6noQrEJq2etVPZnZe6+2XJmRYU13vJtqoqPXXyoehONfE\r\njktZUivQKFBf5e2gedcoKKlPkbeQsN8xXzvz7K9g621nWbW1nAp525Aks/am\r\nyngUEVgiRsmjkTE8wW08Ji/eVLyH//sU2kcGi8NAxOHKp40HYy5Ninq3SgG6\r\nfa2ZoMIKhALV9nK8DoeNh5xUEQZvhNLvh8aXs1/oOn6tdRx0lZpG+3nlIOFN\r\njjlAaAWFdVDx0v0t7JbEf+nV9ttMKaasMacWuIB8CrBThQkpmo1Mvxb7KGZ9\r\nyzL07kA5A6Q0tw17ukEieXNGoW83IP+N5xD+FfihCo+HwdmEPBVpzTcR/JB+\r\nO//+9PeAaHOCd+8m4JoiY5jwut/Y2wi/HTesmn7OeJTZQTJ1FIVHYybU1yE3\r\nmT3SYOSmlJEkEawBoYmORsKEBhax5kSC9tIiUPXPEUCu1Y64Fccrn4WyAXpd\r\n/+VXouN5+sq8bScJR6sxdrR4u6jeDlAaRs2i29/Ge9ofa14RRZusqJwKefQO\r\nHPVuqIYLxASRbFrOoWcn89tkWgsP8a/h8Jw=\r\n=MP1g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.1.4.4 <2.0.0-internal.2.0.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.4_1666248111035_0.13822710882476774","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.0.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.0.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.0.1","maintainers":[{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1c8615ad052d1214769ce62fdb28e6946381d578","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.0.1.tgz","fileCount":34,"integrity":"sha512-HkaXWGbzJ3nRuHlYKBhoEzyKXrDSLya4vdiIey52HAbYzvnHO3qzts2ida7prMV2svUG7q587Sz8NnUnQDZ2Rw==","signatures":[{"sig":"MEYCIQCCjSHBKqpA5hlMOOJXniGQV0+d+Sffewzud+hfVX2KQgIhAMknYpP3UnMOJdTwd2ZPE2PUZEKoKCVIHVJBNYQbD7Vy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjUZ5YACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrtlA//Ug/49a3O5YcM/QS5dNqziAvCDCLkB5O67s7H9DRVOH0mc3oQ\r\nMxXs0gAYat/vParNdCHeGmfKOkmX9kXbg+d3Gov8bpuL1Bb90qi9NSWF9xPP\r\nrrg+9eSUjWlmq2lo/J6afD4EQEGX4uI5osm7+kUNEbQ2SpgyAH5L3p8hqNCy\r\nwSGnqoAq1cett3Thxu5wldb4fE5FvSPkeYgpgSrLJRKsmtxdYIJ+L8/BYQ+u\r\naBatm7rJ5yox4ifv2d70HJrHdZh6ofiKG1xdrtRAPqsWODm1qLqc56myLDeu\r\nY6wYSZBqd3iolOLWFi+994G0XN3Yi6BGxAIPX3QZl3A57/Qma0gPb3tanJcG\r\nChqdlpJkMdjfmabJgbOcjxt/v7Vphyo8QvvL72Vbr2wt/r4nSQ5QGakTH19J\r\n0UhTldE3t1RM4tJwmEMQssfqzxpbmkTpnei2BwHIVbm1+otCQNhMImIx3Hns\r\nfMseM95+Fi+COq8QvF3yd1AxTISh+OoEIT9KMLQHLDmgUyeal3xNc09b6WPC\r\neWVxU94mA6w1PQ9CoIsSd1/oqVsPnxT5ax2Z2I94tU9fWqoF8D4EB98e82WD\r\nvlPhc0fcA43PsbUqumu9sembSoAxqV8HPxdSCiNmovJ/4keL+24gn25G9TYv\r\nHdXoc1mSj+uiDUBRRv2bmNMFdIg9ys54tW8=\r\n=JBCH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"curtisman","email":"curtism@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.20.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.0.1 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.0.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.6000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.0.1_1666293336324_0.6581621396691097","host":"s3://npm-registry-packages"}},"2.0.0-dev.1.4.5.105745":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.1.4.5.105745","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.1.4.5.105745","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2b778e1efeb0c25a3a13eaceb95890795de03d7a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.1.4.5.105745.tgz","fileCount":34,"integrity":"sha512-e1nAY+C04Y4PfbqN6phBWN/mjZque2XPsDA6/dRrkROPBPRQd5XU9xg0kTxTnZSUmWtNrHj1TWjy8ngPHlnOGg==","signatures":[{"sig":"MEQCIF3KhAzPHkve+lwWBv2rpK/gxcM1yMsAJVDu/qNQDBZWAiAWBJfUcnIwbrgENv88c2rTn4Pop9lTsgyLAJVoOgp/QQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYsl7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLBg/8C7QlfngIASmYeG5jz23yAQ46R8OGKpVr12+uqlAGxpoyVLOM\r\n2XoLM9PtBZPASPNtL+SofEWrn3qv9/CnRvP/x0/LVtQFt4JOodKEa/q2qVdZ\r\niNao0xx77tA75RcqMx6igj6L0Bw4hrWufjlvZu2N2Kj5xcEt8Gp6YO+s//l5\r\nhdqOTsi7Q4B0OZJghqktqS7gFK5S04MloNkCcc5XpBcairIAZo7mg14PEB/A\r\n7RWIJ/mQQC0wU80NZ4GsSA02Ny6sdEr5vXy1lMLEy0kQ0xZYAZLQ0NfB3Mph\r\nIyqLJX2iRHED/d83Bd8WxM79NvsLp2iuMJfAZkdP3ZayGxsMaAAtxjkSrX5n\r\nNigTekCDSoQcb71h+yzoj2AN90M6UmcT8RMt6GSb1cRjieFvDb4Yn6uCTQpB\r\nGe9IgDIWE/5e53P3VzzEZYfo2uVmOxTykTWCrDDLoA3lTr1GgV8ev+g1zzfh\r\nWW44POTK91wvG+LSFXy7ijKbp7sq+kd9mhjx9xVC+ly7In30tZA8ZjHhlvUA\r\nr3jIOYXWl3DtrmVqIZ8g4mPzUHkHFw2X6e3uHym4z7qywlhgmavwXJF7FCxN\r\nt7XkWFh3130AWZmAdoUy5DNEGjT2KWz8fFES9rqzyIRPMv4ayTuZ8ST5TvXP\r\naynjD6parGQfgFEcgjimt/FJgEflB+0idsQ=\r\n=pU1v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.1.4.5.105745.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.1.4.5.105745","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.1.4.5.105745_1667418490914_0.1374673837358551","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.5":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.5","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9ff9355a2e90c5079b57f1c7ea9006d14d725d9f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.5.tgz","fileCount":34,"integrity":"sha512-j/Nr44AjY5054XA+LqTkzliTstnRb/KFyXH1xWW+RARZfqry8lMM7k4Wq8zD86Iki1TENWTI871tG0fX0rMpZA==","signatures":[{"sig":"MEQCIA+KaT9bhEhwkf7gfP2AqoMLkwdkmKxpC70LD8ZtVMRGAiAfBXf7ocfCth2nYaznRUO7SVjfI/OmGhadtKRtRJUTfA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZBUHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoUrhAAof+T4CqhAJKykmJ8JMCaRsNLNXXYnZry1Ylqshk3umaXkkt/\r\nXTr1SF2qNcQI8moKSeukf0W0QM/qIyl195pIr3NLR4vzdk8TyJXVLMmPgcSb\r\nt87jPHjp1VQZXnU/7ZYyjz75Pvv6XS6RjGEQydguchW/DBvcFPy+Pj6KrHZR\r\n7CZPmnpRz2Gc6b2CQxZsdcJw5T8u3Dw1xIZ6dRSMviCzxn3XB4Av2L2lakjM\r\nucHQnTU0XRrGB5Xv6cA+mguV83M1EYSMGoKb3180ZLUcBMMdGDablOuARRY4\r\n5E08+BaHGgQCs0XBTUoatmX+RQDplD0JFSn3bVN7cQE53aRbqiNtocJ237Dm\r\n40yTTBVE50oqAWuNw0RnLMG/Qvdfygo5mAjY4YXM5MlSxK1iXenJWLsEBebl\r\npWxL52JW3v0gdX6gT/TjoRv5cIFf0mUIR1c5T3FP5KDv0+0IJOvra9C/7F+i\r\nuC6NYjsm5MDYdFdhLx07qWNXtChk+4cjp2HjDxz7HrjQv1KD0uXdXU0lRyWL\r\nYjRN/htSlefUCn8z56EGs8L+mEYsfAF3rc0wmgs2QXfPbSGEJ15GdZweCPoc\r\n5jUXlNrBd/6MbWVJjEO/yThBZhVbfjH4s/1hRru237smIjah5FNN69SafOl2\r\ngzFb2oYIlgUzQYslWFqqWQhqmzfGJnA8vOg=\r\n=64CE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.1.4.5 <2.0.0-internal.2.0.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.5_1667503367473_0.2845933484185672","host":"s3://npm-registry-packages"}},"2.0.0-dev.1.4.6.106135":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.1.4.6.106135","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.1.4.6.106135","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"cce736d63c03517276d34e0020132aa89b3148ea","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.1.4.6.106135.tgz","fileCount":34,"integrity":"sha512-CcfKPDFOO4K5041ZpmyUA+wV11ZNb2ZQGn2Z4XUqDhOk2a1EnQUYYhDYk3e26ce5cnlS05bqRp4AhAsBMB+z9g==","signatures":[{"sig":"MEUCIGm3XWzo4ky1zK8Mvofiq8uzpXHM1VtUAUMzlwYt+OgcAiEAkLjstWYkySBxeELAEUEj9LIvn1nd2MhtLU94QpaScwk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZDinACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqFIRAAooyOO4pr1H1Q0bzrvEH16rHdvCgGIxCOv0HitA77guHpb0nm\r\nijxWnKpo8Az8UZpbr3oEOn03wEovG+LaXkxkHakwKWEXVdwAB4eBVj9XHDf6\r\npPiM+46bm+nHRLSSd3UzbGArxe8e3A1uJkBohWLMnm0TnFCMUncFaLDB4RqP\r\ntXiJIUaFgttDSnZ6OrgjAulovvqMtMwzq940Zj5kgD+ZRIWJnYhJE75DjKNv\r\nzvXUzbJvOd30EZ8d+KkBCCPcoFZ8T6nbDiJvIIEQWdJY1VR1e+k2EHUOvc2a\r\nY2uPx61VoI1azG+gIZnnCvAGtwR9/NcrVJymHtKsiPrcT3/VUuCbDTWhFDnz\r\nx68O3aIQCIuVBXcJxRimLjoGiMqpdjZnzN6YghEyzwkAW0X6fDvSAmhPxAio\r\n6CuyzWZmWnTa2UOhA5KMihl1qHXntYhK4+H6wKrjRPR0IjsRh55XQvIs17NC\r\nOLoEixXHbeB8SXq7lKR5bkdavXBO3V1hGFnCbU79pnWX/5iw5EqpnpC7jhI1\r\n8bUZcq50BbL3xmr3DgCuGYs20mdmuWo5eLkUCLhKmPBaQ2YIqecGYVlx/I5p\r\nwbMg7oRLQ+LsZbjZsp1GUt5Zcd1H/W+evSt5pOc2UbaAos69Cfd6tQEzNHC0\r\nHYQyn9V5wnuqBlP3IdFtZql4oyHzQrlQlJE=\r\n=H/8A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.1.4.6.106135.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.1.4.6.106135","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.1.4.6.106135_1667512487513_0.5033282239506291","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.6":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.6","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.6","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fe63c49e995b8a005f58ad538e990dc5cbdddab1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.6.tgz","fileCount":34,"integrity":"sha512-FZB0iNwB+QEbgQbCn6GfGJ5y+FcKTiy1DeHlDcXeqT5GILMYHLNtz2UxCNaLiAp8O5VrPDvWSdWcaLvFjlEOEA==","signatures":[{"sig":"MEQCICvWnkgL7EyRXN75OUYwCP/g6KhcBlkCZPs/Rgw6646cAiAYfZR0ShBi4qwrJiy8mf2vfA/tR1UGwMknXegXgi0duA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZELYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq/qA//a10N3xjZhc5QMWNn8UYJcHeKLupKd/B7l+4491+rHWBvglQg\r\nXfA6tTD7ex6yuuMHGRoyMOOIkfOX3q6bdXL/dA/xndcgFXIM1NB7gIhNgvcW\r\n3P9l6D4A0PTBsvUB1RpEoUvdLqaQXVTg7ciTRQ7+s9TMqxtSo2pT/ZPaJIyq\r\n8M0DQZ8T5u2shRfA7TgOIjbNxcBRD3lYl1+eMzBzPpBdOKOl/idJJU28q4kc\r\nFFfIoFcFQQDQHHUPq8t32KY0GVGgWLoDMRy1inW/WEd2+/IY/yZhRkLxVAzg\r\nLt91P48sw5IhTbAJSHSUBWavskmuenlz4xENYKt7SbOxCZLpC5MSEHTq7SFj\r\nJwa/iR6zfg6w9vkA+cHf4tIxPoOq3y128nlfi8B/j4jEqJfT0tbaFj6aicKj\r\nDKR2dYYl4OqrH6awA5fepkmSfjXRZqOfSr7nkygntTymIw9IDx7/01818WNp\r\nmJU44dhigWLizUta5iUcLRkGwYpM/dqMyI0iN15LASoDSmzzXOtvqAQXUMZG\r\nv+ydv9v1nHPghrgARsbk+C/T8wY5ucPU/YeawKXn/KmEK5vummYs6wVR4fpD\r\nrS3B871hNXqs9gEoU6DgWJBvjWI7RZZrSHfIecflji/Eg2MADzlF+JNZ59vS\r\n7mwNqhOJ0MciOLTtLSpqFxA+tmVS8sULWBE=\r\n=eAsY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.6.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.0","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.1.4.6 <2.0.0-internal.2.0.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.6_1667515096093_0.3839873872482866","host":"s3://npm-registry-packages"}},"1.4.0-106438":{"name":"@fluidframework/test-client-utils","version":"1.4.0-106438","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.4.0-106438","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d7a8f8af6749f26c7f5cd3f28b1dd0e9d20e97e0","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.4.0-106438.tgz","fileCount":34,"integrity":"sha512-cf46EZ3Q7Kiv9EXsV8UzRrhEOsPYpYVje1wvewIJTCWa7iKowM2C1u9X62GqYPRw2tSe9tUW58AJcECQb4F5tg==","signatures":[{"sig":"MEUCIQCiK807yq/lXdcv/WIUQQDeaInJINBmjLckRDPSOhLIjgIgIryNh9LrrXymdiyoZZq0nJVXNCDRLUyRfjEEIJYxYpE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZYwnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpLjQ/+JFn2vpxicck6V2pxI45AT9klcIh6OetWONzjrj46b2CDPuYh\r\nbII4wSkt50qAA7HKvxRHvIzTI2xNekGgqu5nRERbXERvC7P1bM+4ZN8KyABB\r\nq33pdSK1iSwA9F5C8VrRTM8+qv/v+alY61qfC8eEP2u1yrHbc50zaTGfF5K7\r\nT/jJ7aeHvSeNU3QLMxQUZ510Ulp3Q6So0cuGuuKlNKBxO7loJ5pBpWB3/vb9\r\n2E6Az/9xOxE8yEjzD/8wcMURS4MFaiBhNB/CTIDzEFE0pqO+j+1LLovcjpaa\r\naDQG92iYw1QcQqT4dbBeLY1WblRrs2KWImkOPK/+CEljoBavIZBonBnK0al7\r\nirfQCY42sx2/7Qkarl9IRR3CFISEaXYIv50MzaZL+j12p+XSJM5p3s2jdDVj\r\nAXU8uzBnBVVr+0iBw6cv67CEKnLEwyVlu+Jn/y8ot/m5pahHYCSPJwBwPyVh\r\nq2blq2SVRmvdl6EHW6ionIJEHR/naFs1Bq9KjDsSRrXMAWCWcFcf3xL5tolz\r\n2ugSBrtk+thoJh4DizH77dDapN6ghyNVX7FU+6+1a466K3zMDJqD/5gJR6Ru\r\nYItzBcqGVIeNearNq8W5nWzPzxsc7sriFZmGLNt6uAlgPloHg/UvrIF0Xhvx\r\nTjOYWX1CzvlXbNEe97BtlkHpd7FmS8Uh4Sk=\r\n=wWG7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.4.0-106438.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.4.0-106438","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.4.0-106438_1667599399229_0.6580413065891251","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.0.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.0.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.0.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fc6565852df195aef600d283569ecce9c70d7dd7","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.0.2.tgz","fileCount":34,"integrity":"sha512-pJFMYPTmasTgNhpY3E/CguhqQzPSxTzunKIfvUU29KIKwsufEdURyc2oOAhIp6ghMAUWThwyAr+VwWEWA8CNWA==","signatures":[{"sig":"MEUCIQDk/BzfxtG+sldhUzU/YFfOm829nuS6fFNDJTlNKWQ02QIgVBVxXhGaq2YWUCoIVUBGNlDMZ8p/l4Ug8NWKXKR0u8U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZZkIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoXuxAAjCLUjuZlH3OS9ssUQapBQRYdThkb6zk73GIg4sbMHW5SWZ8W\r\nwznynrhF+dw3lLIi6LMIOJxOCvb2kUwPzpMQVt5bYGz2sZgp3z8pKjVTsnN1\r\ndyC4up3H/2/IqwN2ajin/nrJqYQRGh4oi9fNaH+eLK33bgRsffOcIQV0HEMq\r\nTTAWXN8QxjlMTukIyb5SjYbQ3kykA56q6/5Om+MP/p2N01EWXQIfGNnGFeve\r\n/0v9nQVj+f0uysFDzD5sEM+c4nQ42NHacW1EGbV84XYQMsWtwgzOeBv1+4AK\r\ngCbwpalZITAU94lEgQIl4n3iglcStqIX0tz+0yGol9Oqud/TNtiepmBZS7tY\r\nMuSz9wVAh5GEz0OTGWYZ9aKKvxaDkK0DoDHnUl/FxH9UumWImK2oFXi2mk45\r\nY1PJMt48q61kSRWLniuJ/Iemvy/hwXfDoErgPeqoePU47GZbG7h2BwrtaabB\r\n5mwFm+Fo0NFsd+FdZTVJ08qa47SoFW1MF7MqaPzS+lLl1nR4kr1z4YnBHlFw\r\nUISVifmt5qpflx0u+W2a9kud756Unv6UXCYEfaqJrRlIGh1/9W60LSThjhlb\r\nv3+Ud21XAERWV3SFjcrnpsypVZhJN6N2Cdq871Hx4n1auIw3ySHjIbCYif3s\r\nrfQWjc3Zj8TXFys2TrIIWQkVTBl0yptTCDY=\r\n=/Hgy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.0.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.0.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.6000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.0.2_1667602696436_0.4199891469649142","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.0.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.0.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.0.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1cbc9e7852d60de0c0339682e3352df8dc34c8d1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.0.3.tgz","fileCount":34,"integrity":"sha512-yblkrve9jCUwd8y0aqJo4tr9LM1+oP69d1W0hQae5r1FO7nggbVuWCaBUOzNiKiqf9bt2WnRz4mvjsDCJBzSxQ==","signatures":[{"sig":"MEUCIQCom1pGzhSoGQqjSRquyOOm7NbE9YnykewsKjkOanYoRAIgEqztliv+3m8jbZi6FaKISxSCp1Z1gR4jvxgkT+cShiY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjbUdLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpduA/6A95tC6kBJ3ZHkP7LF0/e5s4Ge/7QamaKLnxbLqKn3vpR64mc\r\nAwoQFsnavRRRxhPJZ9WN1z+Fsr6YNWVGdR1sAvYErox2HSvZhIqbWHj9aWy8\r\nEOzyNZiS+IGUxaOHnAkdy+sJSwxzpKMaRgyFzrg5lkdZaLJJXOm50MEkrwyW\r\niX8dzNIyOkQ66dEcY9BlmWKxtsdd4GDvkRjhwxMtWACr5WvoPbhdYqd7ERTD\r\nBWU29MQkYj3oVraZstBphnwOFR2Woce8pNOmwikqvfzMaFct3Mrj8JHd2r8R\r\nMdV2YNm4hRrAg0rjyQHB+r/Dhjj6IuBeZV1IOfmhQrbrElW9QaJ9mfAmuvS4\r\nJFHdv4RcOWejgvO7jCDOTs/8XN5KN/3XZKizgtLfILRsre05I4D0v7YgX9Sb\r\nXzUE8Uhler/4eMsB5R0JcOthkdZ/V0JjKMG8qmYzt2/tSAvIMB4bPKtD8P6O\r\nIYfjK2hPP0RG6bRo63dhjT39E3lso1YhQGbrqUWOcRGs9rbyQ1Nt+UAhFTeb\r\n6nfXO25vM8QdoG2dhp3a1HoxGS3CkKK9rwoavnyX7CSj5KFlWO8KZKw9D0lv\r\nEHgmi8upuFw+yytYpkol0JxeJfpE5Pj8WKETUprflW2DPVIODdA5uQRbHw31\r\ntjrPWrhqT4CBhpX9rGSHvBrgDaGQRM30HTI=\r\n=ApVK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.0.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.0.3 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.0.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.6000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.0.3_1668106059103_0.909233535850934","host":"s3://npm-registry-packages"}},"1.4.0-108057":{"name":"@fluidframework/test-client-utils","version":"1.4.0-108057","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.4.0-108057","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fb6f13ff5d58e2b868cc7c4a7430d65027c9fb5c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.4.0-108057.tgz","fileCount":34,"integrity":"sha512-WcdoRPos0YEpvD8U99AX5EDk02ITnn9PeF1jUWdxw3ud1fLzMaPBG/BE+/d7URq5rZO/EBm/j+4+ZC5d7uRJCw==","signatures":[{"sig":"MEUCIQCnrMmU8m9yoNtzE9Ahd7V/aNzqh2RY/2ANWgEIen9DqAIgPMq5lv2rEgKGDXENqwcvZuxVt75CEArvRjpMWw7SFr0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjbdEoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrmuA/+KN8szIUhWGEEgWCzmOjRuvp/5vEGpxeAHAwgvIIptYj/g1ei\r\nDTaebCAsMUCfGtiiYZWScf5CvS1PAV0REzxCAtsfzrTnLPGt21+QnClPlIs9\r\nNvB+4vgjRSFntAyedFBDYXBJbUcA8FdURWycuEh7wvEfPHx06PVr6TpbnYsv\r\nbqcCMAKh59CWbVzvThJe2+HVItXzmrPkAnmAAAArdvSAJTHwySF4FxBbeSeI\r\nEexJXt5BOpi99KTBGqIPztnEnu1/3/elF1FrKYKOgsjfFULPfLSCqcdVwC2+\r\n2TeO2cM1iRZ4m3iR6Chbi5FEoCupuaQaZOMunBpGcXBKIVbGgo3ef2IkEkPC\r\nUEVMz9iDcus0KUs6ee3V0bug8WIQORsXsLYo7URae7V53zfbFO92QY96dEER\r\n/FIrfhxquAfeKFhmH3jcjPjCYOQgtL4wcRCTTmxZI+g0M8uzRVG3f6416fiR\r\nWOlf7nw0Ktr7qSnkgCzGt2v1h3gNWogdo7PHmY5yqNHt3H1Nw8FFedpJ+rrg\r\nHARkTNZ+VZbKsOcv0mKagW/XoxLdWu/ikksBYPwUuU7t8uv4mW1AsxXZddAr\r\ntsE1MWqnMH4FaEHHMFQDyXLkDO5OCG+aQBoRZJPaUnsXqCfRTq9TKn38MkmF\r\nFLZ4kytcMreHr5D0XNkbvDr5bePrewK1TRY=\r\n=xT3a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.4.0-108057.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.4.0-108057","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.4.0-108057_1668141352480_0.9048262819378841","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"@fluidframework/test-client-utils","version":"1.3.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"124a7e750c23f00e55633a6cff654a53450d8c51","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.1.tgz","fileCount":34,"integrity":"sha512-dXD7EQvkppQguCvgSKfbFeVk9LPXmk4TkjUj2L7IR7kQVjVui8VaZ8xZWMHimRJ8+EJLZWMF4kvjGNSe0Y7TAQ==","signatures":[{"sig":"MEQCIDcUzoURtv6aGiz2katjxY6Ntsx706qlSHWmkrWxqWESAiBMlei/alPDf7gKaFqQorC6Z6oggnEXBwH4eeKd2w+A+Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjbrJCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoQuA/+NFutxcNNjl07HGCoD06P/rzp8b16xmC25is3DwNtBq6klx2b\r\nnAMd3fcyogNfUudF8W52LsoOBpfnOqlAKFQDANmLrGqkiYl//6nrIqjXSd4K\r\nK8YLW7HRVqnKMnoBcnnxyJVwTGLd+sxaFkRJ7/7frJ4pEIhl9LRCY2xvmB3Y\r\n7UqTFkSDYb8HzSiigUsi6GQUbJ2FrOPYcjfqPsSNnPlrxtPYv+lZJY2A1nKJ\r\nU7Ah4SYS8xNglVcFqQs8OYhr1hS9ek0La5TIL+VS/j0Q0r0q9Zhd2tEfzLim\r\nj29cFcks/eIVz+TG3F3YvXeFK49rX6HirbRUp1bgzRFlIzhTNwmXR1KCkSK9\r\nEWH3NW/d9CfpoBi5xg2zuH3oTNqnYtxPj3hUaFRg3VEK+bxAIHdppnaH1EK7\r\nKMyOw6WYdSM0qlLq06Ucqi7ODxkdlov3cC4Xr9vGkr4/cR9AGtc2xVimycTp\r\ngqMtOxtZ7zuN7IxfxdS31EE8+7a8VsHjYVgdJdTPVQ7CeFa64WxflRELgbyi\r\nmrO6oukIybTGh2xGhNqjpxIUu12K7ixCkWniXI0iDjElJbRHhDbQYh6snjQB\r\nHxXyllQXPR+N2dVBlntwYsRiGhX7n840hBbvravEUuXzxW6ov89Zzr2Z/y2K\r\nWegtSPA4GrJPBELlb2qKQTOZitLEvyK75h8=\r\n=V7eW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.3.1","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.1_1668198978144_0.05802271470280962","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.1.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.1.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.1.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"18db5c61ba01ba423d0536f356f6ff6e208bcdb6","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.1.0.tgz","fileCount":34,"integrity":"sha512-PCPgxx56JDnBhlJ/KY6qc5O3mC0LTr0Yu0ItIPoy8ir/r3bSNRC2tLNjP2HHGQmNNp5dRCxkKR1Rmc+0yzRrAw==","signatures":[{"sig":"MEYCIQCu4pGuxlkODyYYWkrsvmxzRmiS1+ZEsHOofHLEls6K4wIhAJ8DqxUP+V1LE64euJN24FJgW04jXZGgvqtnsShcNLoU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjcpM6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoJ0Q//aKVZQV2CTISmjlbkWJEK+n56HBxY6qrJBKmgGNilJqSsya5L\r\nJ/FIXuju7oENybgzCDIzqavHBAJ/FJUWPoTha2fSgtcTcssubdBvdrjCLU5h\r\nJQc3lXAZdhQdXQGQ0qv1PMkoWhTtpWyXeEX//5KbK8nXd+m2A3ADDmVjEC8L\r\noDFLYJNGtx7D0l1yrcsVGaoYJS3fHkYwmg9dmM9eCDij3NPTHM0bgaqsaPnV\r\nnMqmxnNeUx9wNUem+eT9JcIc2H/llR1w+akuoQbHvuyNHIpTzaq7nnspd9BL\r\nrSL0dYMUSiPsVNLnxA7Ebm2lu4l8JlWb8bhROkTxexGGlUhFxj9BeDe/j+LU\r\ntuZAy51eh8zD7aZ2JM1+Qe7agSM3UrHPUMebnQOknbUlnbrYew4MvNw/mBfr\r\ni7lecTDGy82J/uRE6DjidjbMczy9NIlV9zlaq6gVbrXm3FjErsCJfFpiMyun\r\nbuHQzZyo0AkTjSED1e+jzNwoNuzXlT16pLgMeTfm7Oa2kNj5zzV6NSjhAJW3\r\np8jjV0wCELOKl8VWO9gxjP/JEM9y+N36uQC3u22Tj6U/yGQ2niZaYhpqkL4X\r\nExmWhuvdqDlzEXJVw/L0p1EsTwbeVBX+/ttYexLOVKeIU8NEzXTatLwXZqon\r\nmaY+dxzlfqZiAkPiqVHq929dLUXu8/Fp8CM=\r\n=xQIi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.1.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.5.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.5.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^1.1.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.1.0_1668453178689_0.06868265955944874","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.7":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.7","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.7","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"25a016376ac9bcb40096e6c7e4bf8d8fa845db81","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.7.tgz","fileCount":34,"integrity":"sha512-2h9ar4JggYy1+tY1uzY7TpE27sL628hZDgeTVhc4Q3Bu3aUhy/uxyJAmuOsI8Wj4JgGFQLxpueNJ6zXjnjTMCA==","signatures":[{"sig":"MEUCIQDcwyJiMhRGkUpiNuLTJZAx8aUL7IQV59Jq1QeF+riDVQIgTdh8Ilq6fIPnH6aDMg8yWu/598o+Scy3Y5kLI6KJcyE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJje9XLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoQkhAAoZ0hSQEToVmqEIZO6M17jZ2kiTzYVAHtaWVbs2UWrvrZX2U0\r\nMaa9MEL9XhAilc1R8SuDPhLCAaiAeNXbzVgISrD2gQxLYrbcu3Tpu6Cxvi9U\r\nc4zuoi4dPuNWK1RSgMAn7P9tmyhqteGvI1iOOXKN8XftTlKXzHiDL4o3JGJL\r\n/PKWSYcLKI4iUtrkIroLjnt8456H1i+ImHdiN9Uuo0GeJ7p6lOwYzUcQzHYU\r\no0WUxHauI/nL60qDDNaCDVPaczCjp6oMxcNzVlBfAo1jVfDM9lWlWPxqZ/Nx\r\nrtu4BqElgoBM20VDqBKgaX4itLEvFgfAUoNx4LBfTN/pD3weH8siAg+CbDE8\r\nMTjEw9W8dk0o/z31a444WPBS8jnEMy573jrnwvOmpaDjdjgp73gh0CNjvB0k\r\nmSUuLzCsP1gXE7ZS8GuZHgO5oRgFO1DfH0j9gchzh308zkE0ia7Gr0xoXFrX\r\ncjL7hpdbuUjy3MIUppiReB0vFGXDJ6J1xmjxhH63nMSFJR7EwVyQ91a3MdUU\r\n/jr5DiJqO1N+ItNX5knlkGxYAyuts729RyznEitfQzDb5pUiNW45qgoZu4GO\r\ngoaCtqNjeHKudIzr56JQ3QmvRwGShD2tbvGwYr806jpCJcTt9wUwNOXFw68m\r\n/0oDQB9vbzmAFLfiqKP5WiYASQkzMivteqo=\r\n=9z2Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.7.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.1.4.7 <2.0.0-internal.2.0.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.7_1669060043250_0.9680542031675221","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.0.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.0.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.0.4","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"aa5e67c7e54e6981e237c8f5a234561b5b9b6568","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.0.4.tgz","fileCount":34,"integrity":"sha512-8355+Vnj6+CRsIo3DsHfnWbsWvfL8PbfTMyOo9QyjtW63AvteGznx5Uf8QX8VWwbDHM9cMAEtTjcFYW6DkB8oQ==","signatures":[{"sig":"MEUCIBSChZ4YpelQmChoEUdWLnABRgPT61Xfl3jbinbTwkfCAiEA9FpqwSLqu6DN3RkhV9rn27wmCxLCcZJOEBmsaV0o97E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfAOFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoQwQ/+LhbXQ6PV9EXsfd2tyHbGIIbERxrKzB5Rv8/OfWJ8U578XW5j\r\nku5XLWXG0Po8m2HQVERsDPKgdNAnQQdkQvoZnCBDOJw+SjTSUgh4udpv9F9T\r\nv0+p0O54pzd40eixIv5Pc6VMfR2KOr5k1o7KFP/JhoXDRSZzPaYH/abShmNu\r\nvnoBPak1Hlr6eiYCez3dFOHhnFsakS9Hjfof8SJ855CA2tY5METG8zPswASi\r\nw7U9H87kb0naiICMvi6OBp/evWPnUZinjl5Ps5cUqsCEAaBh3T4d8DT37MkA\r\nI/1nQZkW4J3chsK4JrMuSAR1uBaQ5RCSOGaKdeA6V93klMZU7Iv1dTH3Pqj/\r\n2P9EHOoUgRR1z/hrao5Zld1nrAzBjsJVeNY9Gg88ozWORR3qBfuP4GDirqIn\r\nNvjgYIlUddo4S/wc9VUK05cdzgHvhkgxvsoH3ex9c0tDW67+x1nvhnUzNIRG\r\nF1By9PhtJKkBuFMuX5viQSbsMc/WGMw6Wl/TWytxYHMA/Q9Oo9RlhEE7JQF1\r\n0/yPifoUPHP2l3F3P8PyTLx5ZdTpG3QQiyOyQwlqWd5jCUVBYSR6YYEbZtp8\r\nvgbDUBzGpu5RkFJ1KZ5ud/c+TXumSe5BTho6Jzqd+JMM73gSxm+OyP34RJAz\r\nbXdzkRQmZkfKZm0Z/p4DiLzcPuxsP69nuVQ=\r\n=AteL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.0.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.0.4 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.0.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.6000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.0.4_1669071748865_0.6839324492240471","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.1.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.1.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.1.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"143525fa6fcbf7addeb0fc1bd92eb47fef2c9a39","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.1.1.tgz","fileCount":34,"integrity":"sha512-Uy2DA17PjgQWeZUReNkeW+iCn/4Yi8Gc7l6XiyaoGvAzVeb97kuJ+B4Qebx/UkRbZKIk28Bi9y0r8ucZL+o+kQ==","signatures":[{"sig":"MEYCIQCFH73V41k4HXmCUyWgbYCF1ZiEhMlNeNr362uNoy7tvAIhAMPGEjpJRPAiAjcPNu5fL4sw9Jwy95EPavj++StIuOZn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfAQeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoFyBAAhfV5hXQ/pezjo3WxWiYtmVzcGygf0QQu3yYMNzI7QIvE+Fb7\r\n6OMsBnUNrS5Rs7r6BQkWLFhBMR0kzWZ2gxeLWCGA1JYYj+VMNt1DHJu3b3SX\r\nIA8yxxEc+rBUqlO+/Pr7XnkCgsjfr6QMDzdl39mIeEg8AAnnNkU8JymdjBqe\r\n4pTogRuD8vm3J1rliXJEijkrK/0GFSZXJXWDIHjC/272qMCqA+acI3yvQCSH\r\noxRJTzqLQmdCdlP6r6P/Uaw+hzCO+vVLu911khx+Kk4NBvDN6uCjH0I7cWYn\r\n2LImJChkIOKmmFQzx80yLakwkQU1BWYHFOTAP4eNyuJr8ecfJuNH9ut7boYJ\r\nY0lo5+SKAYugPAKG1fETeWysEp4MlLOSzboLkBvNltbzXDBW7sBaKqcM3QhT\r\nILV0QSictQ/ETElSHY1IlY9UdM7+yWmWzOEuOU6H3NegRFZCU6S9upNMCrGN\r\nb47qYgWNDpYWs3WQOhinm+dZkoVuFFN2LV2wUryxOmcHrUjaW8rkhxnKJcMA\r\n+WydvjYnTKoGFzAjVYVt2NFpMZiHfXzLEt3YOJNXuzBzRII0h7/oTU+wUMuc\r\n4ozhf0HabL6rzMpxYeH/DLqVM7IIeH6BUNnVqW6LbAwsda9J5SJrfIggOhDh\r\nP16QFgEUKVXnz93U0uFcAvEB4Zp/M0r92dY=\r\n=lEpK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.1.1 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.1.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.5.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.5.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^1.1.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.1.1_1669071902182_0.356951522381487","host":"s3://npm-registry-packages"}},"2.0.0-dev.2.2.0.111723":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.2.2.0.111723","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.2.2.0.111723","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9e7ec5f51a2a4c4b76b592a1e7532e036eb5abf3","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.2.2.0.111723.tgz","fileCount":35,"integrity":"sha512-skk//9WIYNlendUT4twN0TkjuoAInuW86nGydNouQDpJyRJtOf1Ji1oXKVMzcb1aN2116UfJyKB2PNZsG27zsg==","signatures":[{"sig":"MEYCIQC5q8nmpfu3LZWq/r2TdCXmDTdoYuBKINHlE+V0sFZt9QIhANzldQR3/qveWXXfVOytzTQuzRigeLxbpHgiqp9swfKX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjhNO5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo1/g/7BTYKoKGQcKllJOWfBkVjJ5X7tN3GJUr8WGFYBcaJXg3m0rFS\r\nIencVJSINAR8Fst32VU0/zZc8gljeQXXsnCMMrfEwWw6dG/TBcpU5+gJY9h6\r\n8TlL0DXVka1xTLMTGSC2K/BaFZkTFk3F9rxzf1Ho/nH8ahnhZycKYeFhh+AW\r\n2sEUJ+e/cGPcAiuSGiBEcnvNb/CIaltMUVB3698m7kpKVZaklCyRoIeUiBP9\r\nV6DYKUScBHj2tdU6gxCidP88qF/4NdJBruqvkvx1qfAoa71hx6mpT5pwcCfi\r\nuGH0IXHryc4F2oHtK5das+acFTrh+NxRZiqZloVEbiJ+llWJTecJBAOWcBMW\r\nd6dpOrklgn98B2VvxIqaGlsfXLe8eZX6SZgTqJ1lum2S9+RxQh7D2+tZdG/f\r\noFDUMXv7pWyrQjha21ihE/xsmH0qjbxpctZ0VmZgKcv/r4Ndk1/1LeslpC+L\r\nITuOmksHPFOA8f8ib3csMfWJM7H0o1sydysIlgLHSed5dIgm7pUjClWgaN9d\r\nPKQUF9JxzIaUN3azr/tniHkdJ+dmMVaA0PliXq6kIDAiGv7u4e+K8auN3eP/\r\n8DBeL1V1iVKOZL6v1RY/u/HendMZPfUh3fV0zuIYXbTWqSpjXIQl1rRLevBN\r\n9/77EK7GpDznICA3z4Kwtdet50y8e5z4LLc=\r\n=E7FU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.2.2.0.111723.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-dev.2.2.0.111723 <2.0.0-dev.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.2.0","baselineRange":">=2.0.0-internal.2.1.0 <2.0.0-internal.2.2.0","baselineVersion":"2.0.0-internal.2.1.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.6.0-109663","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.6.0-109663","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^1.2.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.2.2.0.111723_1669649337309_0.8537440927742765","host":"s3://npm-registry-packages"}},"1.4.0-111997":{"name":"@fluidframework/test-client-utils","version":"1.4.0-111997","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.4.0-111997","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1a453e9d10a9641bf810f1a082b45b3880f757ab","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.4.0-111997.tgz","fileCount":34,"integrity":"sha512-UnMeduZpbhCN4VBqco69XFXHGcG9cEkf6sJgHz+/jd3Fkb4NNo56Zr/4HT5lxHbcrGjCRiGEgMMg5wwhJzIcvQ==","signatures":[{"sig":"MEUCIH6BnSDUU7P25CgQ/0PAd1hW9bVdW4ZH4GZGJXIjV53rAiEAuSIuDwgIsVeUrW8OsY+HE1Z0HZLEYZYAgCcHpvGyY14=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjhiGIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqf4Q//S6S3PAUn2HjuAz3rR02clX3kp4ouq6V5R+zPXofvz3szp53G\r\n6RNqej0kGDMSmj6Uh6nazmTQ/uIzls5tHucbZtbvpnpY5T/MRhvEdGUkwMAJ\r\nXNLdr19A5kY8RJlc4eED1UKJDwidgqqCrXfyE5dr59dSyP50Ei3wmR++9ju5\r\nWcEfKVZ8Wz4sdC0LL4Nex4gBCN6GUPp8U6YBq/WE+3EnYzCICl8eAFwBL+Ds\r\nxKrmu1howS0qTQbL5ZTeSXOtZbGi41SPS8FYK6H09H5of2MHdCohKD8DOazL\r\nc45f1AL01paqjASpcThdzySPwgz/c3jhKnCLYcpxyCpDFANI69jaRCPgl3tn\r\nyg5eLRUGVf9DwKTtQX6HD9fA1xX9dFot4yW8wJMU15FsKCNe/RbPbY0AlG47\r\nGfRB3ChcDubh5YH/mLbIzzCTfe07sYFdBIlHOOp+LTq5bLJwstvFRLt7Xof+\r\n0FycIxwVVfRXeEjU7Xx3EZ2rZ1vgH6WCAd+bPrxk353Q4y9agGyyJOV3PE2J\r\nxwDCBBywNPD8aJoBPruTyOBr5AFDLlq2+JpP/e4Qevaj5mqa0ubedU06m+OL\r\nVznXu4tYeXxXKRGM30VweNlIk9hI/upUBvO0+cbDovVyeBZmk4Lbmk8Z5078\r\nuuTXpHL+enyPcoUqteciTryqPPAm4bC1BwU=\r\n=3Rmw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.4.0-111997.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.4.0-111997","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.4.0-111997_1669734792083_0.45785152731407286","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.8":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.8","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.8","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4a3c60df01a81a36b9aa00e583b8bd952d8b0bbf","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.8.tgz","fileCount":34,"integrity":"sha512-5J5ycBBaNzEg0Ku7t3TYG1bglhO2sOz2LJTETStIdflGP5uCN+KLdLVXuhpQJNePukIFX/97xxYO3M01JNL7vg==","signatures":[{"sig":"MEYCIQC7nf3CQwJ7PN5YwE2il+4IRSEBQTGvdUb7AL5QPlzxlgIhALgDQcwOUTc0xxoiEim5JSdrmkPS8XbAVvL9Jgoqu3ol","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjiUa7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqf7BAAjvwUY/GrY4Cnij98VRN25gpJejIJSabBLU5dsTLg6eo+v+Jk\r\n3h2EVTb5Taq6jzbgG3e7+DaNzIB+6+mZbnJ48etneZIaFUOshiWGnn1VqkXR\r\nw/4WqYPIlkIGrAL9QAA3V/jXRqjnQd0P9VdG4ilIwDMa5uPBn1sJ95F3owJb\r\nLfFZtVkjFSMkxFVN1u5a8smhAx2vByFXEi07c9/K8dUcSAAXuxGQQAdvhi8R\r\nnMSYPjVxuu89MnwqSQYnEsLkALq/EfJb8mLomy3cEYQdYcUFr+2j6GYh/A4W\r\nXvtA7pbpK12kpIR/UYF0inw8wdQwFk4BpA6aNn+EYMaGV+n/EU9WiPARzRX+\r\n48K3XfR8yhJG6SIYNII9uBBg7XF1nM7r+T+34nLdscDQ/4nMLHdu02pB9tHT\r\nRJX151p9AH31UPnDlkNUO5QPP/xkDW3No4+HXl5+1dmtT48sSt7t4Q7kAg1A\r\nPngNfYZzm5AF5xt9qFtkgWTE6kZSoPhNQ7jZoXmVK7qp4IbZCZtHfPDhI7fR\r\nOmVAy7P0lKwjAkYU6DuRZ6qlJyj11+DEIp354CUpxkQSrrlYZrI3LDopkw79\r\n2N1dl6qNtB0mHsoVJzeiDbg2vjZv76ZaAm1JUa+9LVf9+PDxMx+WOd2HAnjd\r\nDBQSNcoznx/mExme8M8OERdeEpMD1ri4yMo=\r\n=fg0v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.8.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.1.4.8 <2.0.0-internal.2.0.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.8_1669940922951_0.9818943696195543","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.1.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.1.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.1.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"39cf2664649135cbe8d455d86f5b7957a52b9442","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.1.2.tgz","fileCount":34,"integrity":"sha512-VcYybuE+V9nEXIBKleDRDDoQx7keTfWjQb5rGPuLGDCCOejTeoNaPjhW4CIr57L0xNajr9AMqjsRpEWkck5RmA==","signatures":[{"sig":"MEUCIQCM48tCpQjV+w5XgenrQ8/4f+RwUWCv9ZOlxn1mYDvD2QIgQCTfs3rj8MqSQxWy/W6BK+adFPqauuFo2vK6TGywu78=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjiUgwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr9Pw//fPOBPYbqVFhdWL3uKe5WiwUqT6a8ePiQbJXmj6tCy/AUZCxX\r\n3C/tOzQdqwdFjy/Sw6YJuUvwNGehoGQZWATJd0gOiWbTsjk53WjmPrKTCPSM\r\nsV14kT1gzuYKwx5TrHP9Pa1nZvCraKuhWLl+REe8fkANZJzGVf1c9GtajRHe\r\n31KZkOkgfXa1NBCJBULpb8JeXVn8WoK782K6enLz/e656Ead+6xGgM8JmmgD\r\nY0x5lP8MeSz4xkoI3t6bWEGaG8J3dULPFvAfg5RAxQ0cEGqYgelwfPRCLxLo\r\n65TB0wQl8tPraXaa7oNfm9c5+GTKdqvtmp3x2bgXQEiWtrzW4WaIE3dQIDWq\r\nDp4DG5IWgPJ3pSdFlCNXnpbYm5zBQpGA6p25ukvzeAw4aeyZz4wVXNNrGqKP\r\nPq7ZS+C/mZqrEWLQOTARHwW5JGRXOiWVOM66meStDY29A6w1D7j8VzDYN1Ry\r\n7+Ss7xgKM2PfE8KG4phsPdBbRKCz6hH5Agy3a6vVjVkKifpVGp8b4F3dUkuS\r\nOTtaVKS11NULe6nCAZnqWdFcctHV8LIvJllypFXjX49gewLY10yckPaTW9JV\r\nMazOW+/tSej6UUKFWLo/sgtow04186URkMGEu8DaVa1tqTfhteeWocfVltP4\r\ng5Lh45PJv907K885MW5jMZpHGyqQnijKTxQ=\r\n=L6Zs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.1.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.1.2 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.1.2","baselineRange":"2.0.0-internal.2.1.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.6.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.6.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^1.2.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.1.2_1669941296043_0.5741489181666035","host":"s3://npm-registry-packages"}},"1.3.2-112998":{"name":"@fluidframework/test-client-utils","version":"1.3.2-112998","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.2-112998","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"6ec504c44dd57e3c1bc41445d7673ee3b8b8d5a1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.2-112998.tgz","fileCount":34,"integrity":"sha512-pVY94MXFC5PrGx8MJWhNDT4pijU3HK7eXuEwIhvb9QtRq/Phz/7BrGi4kiGn+bvgqEbMyzFVavcapoILmRLkxQ==","signatures":[{"sig":"MEUCICXUiUZKt18t1LpBbTPZ8BkbSziYtwu5+cyul8B/1ft+AiEAyYfQyHMKEWMVQs/XA+ewtY0xL7VTcFACKRzHVdsK7Wo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjiU/pACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp3TQ/8C7QTfMwpoTT1Ta3j+CLNMub4tp74IXcknqZ5ddcXxXPtqWC/\r\nLt95zWIMt8aC6zaeKMhkdYKwWQ5l1LHBUt4iEYm4CXO/X0z2SHmTUkpClmuh\r\nyLmxD4SJO526Dk1zjDQ1Bo92s6qdJp4SI+YNwEE1eOjnoK1XpB6o7FPLVq5Z\r\nDaZ5KlNMbEmJ7viMFMDvYbrEpFtTSPVXsYfW9QgWRAnL9GbFgXNlL48xZAPp\r\nDwUgtDAsoPuO3aePZgxRsWO1BBr81aBQy6+YtoVJSc5NP7g4LS0cWmZOKyYt\r\nz3HbfLdvSPH8tclKj7BtTMoUrOU2FSWYim5m7gLF7ZsZBPjQGAQStHP6HCvK\r\nTAxyeydWgiZ1unYJ0vtn3plw5MKvvEXGrwHiI/2hAx3s7gKlOViwwoL/3Az3\r\n4E7UDCvUx6NrpU5rkonh1sJ29UrNLvcXWQdeHXkcgBuMQUlFmDst3rjgQvC7\r\nfaWfVdyEkHmZqxIo+f+zrNXwsy0ZTmmyEGwc8qEZMNGxu35Le1SFpOFmuj0L\r\nQEGS44dBxbWWOhhiGxD2LezUkK3P7c5Hs7fnffpcoXTsdNKRrtA0/u93/DyX\r\nFcXCA9QVMp+6hTssDbyyfFkcvmUBdatMqksq1imard3mCyRKiMOQASJi//bW\r\nHv8wEf0eomC421Hep0poeCo0/G0VW2V/zN4=\r\n=gJ6F\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.2-112998.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.3.2-112998","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.2-112998_1669943273189_0.79347369194152","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.2.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.2.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.2.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"78cf162f85009148c93068144662e56407b300d4","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.2.0.tgz","fileCount":35,"integrity":"sha512-oxotV13eQhNUpZ4iz9UHESjBJYB/Ca7Y4796IC3kCaX49LMjgEMQXiM8sbnOgDt8RkUHE2ZeDTO+QLshPO5myw==","signatures":[{"sig":"MEUCIA2Hvi/C577ZrgCccFD6oQNZsOQojL8AvH84Omb1n63eAiEAvN7xdplAQu8oqiFgR+eUCJXsDGp5zK5DYUYVhFvsLwg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22329,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjk4+1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDEw//S8gK2XviU0yqY0gOVgWUebylq0sLutCS6A0Uc1xYHomyA9b9\r\nmzmwrxmDOTnJlBAPdXQZ9V+581UxkrmtZSAgatDMu5bWbX91OGp8rQykFZO1\r\nFkVqOMy/HM2mwKBzYnGS9XfSa78srwMdGFtHCcl4bgthW/0Q84F/0YU8OhDz\r\nZfbcFlOs428OHFf0f0j0tGEe2OBYyDltJXQZVVYmvu3v1N3ubTpcPZdJlzjp\r\nwJ9rdTYHbJYjP4Ho2/aaEtqT5GdgJMYpIGYstWimC4cYb6H1f4Re/Y4XCTXj\r\nrPQlrxukhYr4aigMNhHarmW4rI15Y2D4EQ9ZTg7DYxwSrIsS91trvrg8cWTB\r\nXrQpQKvXko1vqSZeAyrr2XbACdRgHuTDp4vkDlj9DQRl/WWz90LdlozfAvTC\r\n2SOVPHPtut/bKIXv9q2xkjtyadiEVNT784GkMu384q/VhI+P64MDhH3Dwax0\r\nVlUMb40xOI5kq93ChDE9bAOwlJnhhkrKb5wKhMoMI5/jY4p2ECGVG8t7sH6b\r\nDX13aQv/Gn/YZMaLb99DbtyWz3HLrE9RXe68Tms5WiVYXkzgirl7n5jV6Kkw\r\nBC/mhywRVy0qPCaK+Lgz7CrHnEBcNzXniTb2Gr+OURpTmICQ39b486dTxM2T\r\nfVRqJ5vwX5BWeGYPTMmCcZPjsXQ3qhafsbs=\r\n=0+vl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.2.0 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.2.0","baselineRange":">=2.0.0-internal.2.1.0 <2.0.0-internal.2.2.0","baselineVersion":"2.0.0-internal.2.1.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.7.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.7.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^1.2.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.2.0_1670614965772_0.333807872849607","host":"s3://npm-registry-packages"}},"2.0.0-dev.2.3.0.115467":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.2.3.0.115467","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.2.3.0.115467","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0e23791c4610732c3e3382a63aa22c7d16ec573f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.2.3.0.115467.tgz","fileCount":35,"integrity":"sha512-pr4L+XiiZuiECHAcIiDGqM1wixRLvm7c+6APATYByB+q3zRGmWxZnioQVfbsuyc/B+QnUXHnzxkV2vopA5U2SQ==","signatures":[{"sig":"MEYCIQDPdlLw0IbLKnInoWvms01SxK69mkLikRfpKFf8myRWhwIhAMJmgAkvclt7V6yLGuWW3MpQaJyLsP4qYIRQ9F5EHZ3Q","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmQdsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqrvQ//Xxzr12tErVw+Cupd2Vv4mhS5wyjLwaw5ztCKWax+bjGOIsH2\r\nl0rnKfqNPI3coBVxuOhNuRkK+YYB9WHCwfnBWOVmW0MXX8RER0ltF18s6dO3\r\n3CfRV06On6Imm2AMRpJM1A2z6yxFI1x64P8JG10nh/Y8XuU1FQXcd84ivONK\r\nM2KAK9fRQT4BjMsF1erjMPfX8ySwC0fFysBOXZUhuzUWYHWC8MHCizkw7lMX\r\nm+GPEHlrqRd9Hh4D/38X/RHTMKhGNWXc0m5nIy7RpMIfdj+jbQfnqUr/1laL\r\nguxKUcvKmprhbCzkdBZD9T65XeTQUJukRM67vdC65m0UAQQu3TX+GCINVSla\r\nh/6oj+0A2lCcdKOVeR3P6tWwWIQZ3ENKVyreqWae95X1rGBkCUvWpBBR7Ob0\r\n3fMUIOZoVb9nZAk4Bhvx7ZFdEo0twZ0aw5cK6U3oj/KKyNFbzmowZDKYz0Sy\r\nEem7YxWieoJbp/tLDmTIDU3YxnH5z96hD5QnGD4o63ygoDg+atw/gLc+dfGu\r\ngtd+ZZi91UJtVURyDZujUsBwzreARuGLsqow6N0IDPg3pJ6oeE1PUouLefXI\r\nt/ds2k8b4lEWrJ3SAtzXmIXt46WkUfKg4gn0HRkQ131cy4J/d+PJ1hD4sBuM\r\nfv/LJV2bSKYBpptGLPfQ2BJ6twTIyhgqr7U=\r\n=/Mnr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.2.3.0.115467.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-dev.2.3.0.115467 <2.0.0-dev.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.3.0","baselineRange":">=2.0.0-internal.2.2.0 <2.0.0-internal.2.3.0","baselineVersion":"2.0.0-internal.2.2.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.7.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.7.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^1.2.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.2.3.0.115467_1670973292776_0.7115660576981224","host":"s3://npm-registry-packages"}},"1.4.0-115997":{"name":"@fluidframework/test-client-utils","version":"1.4.0-115997","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.4.0-115997","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"c852bf5bd14c6fd2d54f0ccdfda132383fb5284e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.4.0-115997.tgz","fileCount":34,"integrity":"sha512-Xn5yy3DHE/txj+zcosPVYKBHOvo58R9CXdfa8j3OiXltAlj6KW6SRvNVDgSg8Ri9HrV7IlhPsBwJg2my0FuUJQ==","signatures":[{"sig":"MEUCIDAipNmyNgyF3er0fBc2QR7bK846iS0mZMOfNyR1PKs6AiEA/rFDo5x4UfZajsQGtuiu/Sgk9b9vgFzRG/X0lQWlj0s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjm2gXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0MA/7BdnWVmgvgFIEEmTXEKGigIhElwphBUXaavpkyyCS1meTFS27\r\nHa2zEAl7gWL15y7ECtxTtwUCmq1GxxzusWMP4N4Qhs8SCgjDK6B+XemNY1T4\r\nsAi2D5xBpEOqhMuHanNbKIepYzzrrl8BJXATDOU4yUckyVQ2nsoubj9uIxbi\r\nD+K8SoRlpsPqG2MVOLrQ+uvDL5Yb7dqsVwgjreNzRZb0/eRlauz3fpW38fcj\r\nHTAdjlsSzSzVvFgZmwUn36aHxFABqH0J4T2ENNlvHH365fKouwiwyQsnubd5\r\nYYi6oh6lhu1Lt/dKwT4iyorUWGu15LjVWXRYUINH+Xrl1GmiXYYQ8Ti9H4Jg\r\njKRKlHNWFrxS6eFONKGnWtzDchD/vQu9FL0DfY8YhpnbY2jWZP9E8JX5n/V9\r\nI0eaKx3rCFkJLNpB+hPvSKaKydxuOkphOzVxSfWRskVRG/9q3uDFg6VQwzun\r\nrZiDcEsxBIWN3FNxRrLN6SYqvdXx4CI3xf3WHt/ccW32UcPVrV4GeIGbDcOe\r\n8K0GolOx6fLWL+S13OPI/tShyySpVKKx9D0HPLfRq78hmEpOaM3I59MzGqTe\r\nR/IYizuyeuS6C0KZS+80VdQEMvdXqMMtBBYYQmRhM1NUjisWvFU7ZVvUwvr4\r\n4thHDzTxKQLtY3IrzqJmR4KP4jv6fGr40y4=\r\n=Cnto\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.4.0-115997.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir . --no-generateInName","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.4.0-115997","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.4.0","baselineRange":"~1.3.0","baselineVersion":"1.3.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.6.0-110101","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.3.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.4.0-115997_1671129111099_0.8995947343204167","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.2.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.2.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.2.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"3d0692598e997089cd4c515a3225b1d8390a0df6","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.2.1.tgz","fileCount":35,"integrity":"sha512-o9TvuHUk7PUzOxM6ZvYv54OyqCAfHp6UycQIdOiluFinrkaYzqZFu5GV8pnmCpD4dvZbKhNQEASRzwq0HxdNsA==","signatures":[{"sig":"MEUCIQCpfklQim6dLJz78lCZlkYnCT4ITAjBPsPd1pG43pg7TQIgHtude2qvA/TURAwyMIPJEjQntgJeXF7yQB+f2VkWSOM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjuMkJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp7JQ//Zw6BtZ63pS4xQCfcpmWIY59GcoNr2itK2XrWOSCjtXhs9Pqz\r\nUcIyYb5587XdLefuKXcBB91oHcZEXamFyyLJBwNzfinnyFXLdHpN9IPgc3QN\r\n0+MMXwcb9AFQcnPlSqzFW4SOqha3F3wH2T/9qm36mSnM3OEE9X8Ad9RduEdv\r\nRF40zzMLJNOX+zc+8YqRUXQgGNK250/o6XWDy8V7uuto0RoXDUuArSv0x/lk\r\ne+j7T35s2JJf/xMcmAquBs9tc6TqmCEZ5avrczcDJkjnplmhaSUgfsM2NUf7\r\n69bSlaaE5o++ENgnNzkzgDdvxmX/EnMKIAZ6LPbcZx9l0G8flJ+1vBQR+jtA\r\ndSpvBde9WStNOwl8DZ2tSIu3tzleMejDETBfD+AZIwqoPOrTTSPrzivnOXtc\r\n5cfEkizy4BjU3ZpCE0U0211iiSHuBLR0AOdrCexWY4kVMBl8m5s4szv4UOam\r\n6ci5a98dA1sciU9JqJMgUC0Ex0Mu0iG2cugEN7zggbE4buw9gHxO5DpZg6Y2\r\nClebIbGnqYjdTrqrEfI1ws2fOD3K009MPYmvGyz3dSU6Z7tTx2YITpdyVigq\r\naB+j5QZM9vfGXTK5iIcbwnqVd58JQ7n3Zts121+N0G0dgYYBGW/dBwQWIfbD\r\n6J47dxYHSiuVFF/2wimE2n074rWxOuZ3O+U=\r\n=fAll\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.2.1 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.2.0","baselineRange":"2.0.0-internal.2.2.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.7.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.7.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^1.2.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.2.1_1673054473555_0.12360853057314558","host":"s3://npm-registry-packages"}},"1.3.3":{"name":"@fluidframework/test-client-utils","version":"1.3.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"af9de09ce92c4f562c5116a86bbfab520bcdd1be","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.3.tgz","fileCount":34,"integrity":"sha512-x5J9frXVL0ZFm/bzFBNmpscJ+iQX95ZGL63yjVeD1XyWiFy+eTyOD+fyj/hwwCNfhxoP1TAjGyWZ3ZUupzWpNA==","signatures":[{"sig":"MEUCIFDSId9OW65XW3CCNPkZWPSuWdw5CugeCqkn+zTISBsxAiEA+njFmwk8G8tfjnTtc9ZywZSA0Xu3J3BSEmNilKxBGc4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjwF2bACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoztw//VENbDr+/3L7zu0SbpxcUBX4z5DyQ5Ipzpnmcq3jz8mKQdMP6\r\nOn+xuaGQTk8AJkIp+fhvPu9UqHhFmi1AEO/NegVGw9pnuqiSP2Pmmomrq34t\r\nFHnae9ehtnyiKZCvfwZjv9nWYNARwSuVht3EPZtPBUVF08eN+7PHtSRuHnze\r\nGxL0YVtuz4voRPXh1q6n1teuGeoq8UHeAWsT2oilP3CmMldvfdmGpsj5LMfE\r\nzh4ICa66SdFBUHkLEwKcGilCQcIib12/HPZv9nzlr9pKuVCSi+qQET55ER2r\r\nwAwehug2oY1CU0ilSoP32lT9GXp01XeJskKJ4wEOuKbunDGSxiKRIQk6uVHx\r\nJmhiLelY/nljMKLMHlwqRISapcGSIFelbk5iCv2Jw61yOQFykkLIjvjA+X47\r\nOq1M+ukX2Q4l2Y4iXYgjrCGo2kCz1S0bIcqL3AGgm0fe2+OqZMvt3S8ejqFi\r\nggg96NecQpsrZZ4fDMTaZS2aGqArWIwBKtSOqu+JBc1ZvJtrPqrxw1/+ubyh\r\n8QZYDOUFoKOGyXSxhpr4b65O1k0H2xlardpyiAeAENE8K3MNVQtLige1NzW8\r\n4Aix0eUpLAtx+/d7wv2k2HP+1UwiC0L0PJLUfTtmSvLnCx8V0D4vIK9oInXm\r\nnTTCSL/98uvGW3+cLAS01xK1m9RfNutMD9Y=\r\n=fVvH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.3.3","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.3_1673551259227_0.183984164444575","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.3.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.3.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.3.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5f847e7b00c34a278d447b25438de528f6137387","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.3.0.tgz","fileCount":35,"integrity":"sha512-r5lAhbzz3KP/gQiE4TFxdkbRr5VHljuST2jyS+N8Rn2WiuZJSJqspz4NHsO4ib3k9L5f7jCvHMML8OfJv7Vjlw==","signatures":[{"sig":"MEUCIBsDKOGLPL+QzWlHRqOyG/Ma/SYq4Nw31lYjuflb47GeAiEA5QzcUsV1oakz5V2otRX86oUYqDnYDY19qFtLrodm/6U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22737,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjx04eACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrZqw//X/E/yrj54S3pWNc9H4VPJCWdcPKgqMQUgfkmcq3NN/Qf8q+r\r\ne58BpVvCkNrFQUlEOAAUP4fe77eag8tVWd9l3gEm5pHVMjljLXJDfSgnjpfB\r\njSQMrEHRbD2IHfBvjY56rMPgaohenydOuHh1LG6c+b6AbzSVjs5PJKSCE0Rc\r\nA/hwDU+17UN6y3gV/NtiF+ncT+YZ1+6fXbIBlgsnMGfWvtdhc9zIN3cEAt5C\r\nMZG0DPVz43pVyTIrshllL4A0yH8s8EKxEqVDqfdweifEK4WZuLuUMywh0CR7\r\nDj+MgyHtudnoyrHkl6WDC3lbFeijM2img6sqDKQgXNxdUiW6n023wK3h/+NW\r\nKZxlfEVGCSX2/Yc2navv0AnDNq95O2UIgKh6Z1uF7glRQRnqg2cyv6X3Xucf\r\nQz6CZwgPBjF8tqDtae2a3Cpa9ZbqAgVuhwoVfNtIGUFtld81gEIXY9cojtOI\r\nkSh9nTs2ASCcnwTarzo0vghfSB1SKAVacHI3iqrFTL9xOWw5GMt4n0VIp0aX\r\nzf/P+ZdaRsUCGJ+BV51FuHY6AuRdjD+kRuvarP4pt4IB7oOCDPCyv8niaPKD\r\nx6MF5POdWW7tXpxzgb/FMLi6TpUZ57pLa8aGcjqAuX7Nb3t79+l+p2v9D5KK\r\nk5U6hpZcuCYtJzdvcjRwfom5tAPf0wldWaU=\r\n=AMlY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.3.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.3.0","baselineRange":">=2.0.0-internal.2.2.0 <2.0.0-internal.2.3.0","baselineVersion":"2.0.0-internal.2.2.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.7.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.7.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.3.0_1674006046492_0.6594221739994595","host":"s3://npm-registry-packages"}},"1.4.0-121020":{"name":"@fluidframework/test-client-utils","version":"1.4.0-121020","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.4.0-121020","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f633364f5c08ea6569eeafa575de73b2e96bdf07","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.4.0-121020.tgz","fileCount":34,"integrity":"sha512-7YLV2pvvSDq3Bcp1LO6+n3hKvIxPlWE5KW5T3+z2ktFqWyYExZjaJ3neuEwsktNYGt+1surHEtA/KDEiriOtow==","signatures":[{"sig":"MEQCIAs3GB1hVr52qH7eMd1fRaZMsQZCB9Tl1eAC0HDaPwOMAiBOtdLV+hGhySqZAiI/KAjxBOEvJK2/TxZapQaWB95xHQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjx06pACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrSnA/+OKYb6SZ5sHc2LNYDUU6aGlZKXJBoK3ZHXXe/cgT7IBdIaMYy\r\ngnI8n2nbYz9+jwKRS525MsX3Z6XWiVUs6Tbd/vHlO12gbcUcwu/r+OeRciVD\r\nB7hpP4vz+GZpYd4KG466YQ59a5r6qalZ81VbCgFG4yDcTS8EVpTUBAgahD+F\r\nvRbos9mSPxdkzR9RPuQhR+uux4j/jdwR7+6zwmq6cOS1y+OgcQWRSqhg313a\r\nE2QiDRWYTZ1gfYyH31dFQf4fav89EBcbuI+2aT4EubAijVqbVQgVghfrkIm8\r\n8nLnEb/e/GXkH8Fb78RaR3pAGJbYpUAVj4HDRngOo6jEvwg5qDF0FfG7luGh\r\nt5sCHhbMaGHPnsJ3UTorI5nnY9hv0LId8AbxXc1aChxhlg9Jojg6kPxvwUxE\r\nK7FWe/B2Zvu93Plslz06EerAVZNmexaYVU9F1Mv+spejDAnNX4mjKe2mgOJ2\r\ngm76Utq/wqrhiF/6nWbyrYoZIgqqP7E239vPA7qQC8zIg1xGZtlTKeYpWmKk\r\nbxraXsZONN1NUPL0lXgLSc+lGUpn3CjdI9oogqHO9tPQEfJjAs/e28gFc2Oc\r\nOeNYWhWEBGYQauXEydZkhEWW6w6dRz6gfOS091H8UHEM7zZJtQr0gJ63/maF\r\n3DlgbVgdr/U7QBRjye4hbrUbuYGceDwM3KQ=\r\n=3iIZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.4.0-121020.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir . --no-generateInName","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.4.0-121020","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.4.0","baselineRange":"~1.3.0","baselineVersion":"1.3.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.6.0-110101","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.3.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.4.0-121020_1674006185541_0.9785747149853683","host":"s3://npm-registry-packages"}},"1.3.4":{"name":"@fluidframework/test-client-utils","version":"1.3.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.4","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1b6732201337ab44facc7b3d57a89b901bfb14c4","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.4.tgz","fileCount":34,"integrity":"sha512-qazuhTxxiNH01PdakpLOR1JcvVkXJsN5Ax7JYL0pwKxGMLO8KnpJwGLd1Vlu2gZ1cPnTM9A6D3hnMgF5Q05NvQ==","signatures":[{"sig":"MEQCIGK10JRLHPu+60mpb4P9uC2gF0b0Ux7WuCtPBjpgn51sAiAy45Ax+TAcyCOAuvvBuMjrp8zOhY50pLCmAvvC6cCymQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyEbZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrpWw//czI7/z20Ik4CUrTi0EXw7FhHxxkJhAnzINzxs3p/lw+cw1dj\r\ne+y0RVLGWxu9V1tWRGo7brAQcOP1VyOI47Q8Cl0wAIju9xRNLerdLBy7kWvO\r\nBn6kN6S1Vu66bV3Zy35R0AK6Wn6gxhhNr5jDlWbAtlADsipkPRoA1INJGBAV\r\nsKO9iEbNZd/1IsWBqCMEXO98APZbbpZEjIKevpmgerPmbsIkvYGW/BuERIQ6\r\n0EdhOHiveyzQsCljpIrcC5vjySmLe7CHRWnY33j7FKgWMszARCtlBXEh4J7S\r\nuuvxsOPpfW4v/nJPQIm2jyKBv4nZmHf2a7FJ+NI/3X3EbLZEBkLU2JNkpkn/\r\nM51e1UJwi4mqGRkzPo/sebmrwraGG0Tr2GPDvzhtSRKLvSo1wWyZYF2cPD24\r\nXho7Xkckew6CPyVUY2/Fso3U5r1caeQwfBZ68BjnU1vn6R3GxSTPZabD0bmz\r\nFohhzZLrVjrMhs5rKIybBS5nyD60xZ1Xff0URCIcze2M+B0MJNoAV0xdgpCF\r\nKap0HDWsYap3DOQmN0yO7EitIfrrQwQEMedTctxKulxMVDxo8vRNBrYna640\r\nw7ZexnPueRl8iwcZSL61nHM+gVNTqPYrgyPaGuH9/ujnXsTfIdLV5l9fresD\r\nx8pwLEGu/j06xmm+zbentbheiq54TAHZkpE=\r\n=iJgb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.3.4","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.4_1674069721159_0.32921289176658575","host":"s3://npm-registry-packages"}},"1.3.5-121405":{"name":"@fluidframework/test-client-utils","version":"1.3.5-121405","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.5-121405","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ce21b1e52bd6faa69a7af76e1e700c8a9adf97e0","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.5-121405.tgz","fileCount":34,"integrity":"sha512-m9EMYQFTIKeMm0Tngc2y8Zcwuj04hkSgsndeHgbObB9/WeYmuuz138BYi39SpUx5Raw5JWeJ1gB4FhWNku+tMg==","signatures":[{"sig":"MEYCIQCiz/PoIxQnVbuIGLnK+hsN5cyplEHhQ5Og042fC+9QZQIhAK1OhmUzzJ9MAR2lyzBfQ2IAtSDQit4Y128dZlrzeS8b","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyIvNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpYHg/+MsCVlQ5rDwBevVmlkH48Y4o5JLQO+Lv/XkS1yN5mtVSFGvdT\r\nuF7b2y8RlTFQpMTxIF6dp3rgjcBKMy/1qfgn4jUD1PF1cVMZmsaggc7k6ng0\r\nZus2cQ3dsNHn6xKkxkYpUE76yhX16Mtm7EBaJVJvchvOg2NfrnLqWZ124Mn5\r\neY9a3h39uQMdwd6doXrw3dAFzBzv7mzWaIzATsGUQd6O7vVNg156qeQueVMx\r\nm09fZw/sn5QV8ryFo4n91juC250r29mPB2r/qbY3YzLhDpEsj7kUE1jA6r8D\r\ne4x1nY/npbT4zuvlsZ5pkPqcDKLv7EqFxT6te4Gp2RaXC41uuGP2+L84cO5B\r\nwmaf5KTLosd//xkeh9aZoLNvCauat8LAwWfEqz3ll6E3GFN05CrNtzq95ek8\r\nGqJEn+CE6mTi7xhobAbX/nVN79qZ1U3Gpv5/ys1RYdwmKEo9bPiweKVT2xV7\r\n7fq5s+rOpGvHaqsEnXgZJYf6ISn/5Ux5WD1mO6dI1+wOmGyy9PJ0r8sapzL8\r\nFoPQNFEA2B0Wla54GcjTngihz3nHpR6tEXNAg+5LDi9ZwxKo4bXpysWepdQY\r\n/bW8pagt/xEg/lylJQ4fTkC1pFT5/JU+CPElNVMkRuF+OoO1UfqmK1pIRpwf\r\n6KEwfwwGZASduG9o4kRkVzecBosWFnNz/RU=\r\n=YoqK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.5-121405.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"1.3.5-121405","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.5-121405_1674087373286_0.2939583049641976","host":"s3://npm-registry-packages"}},"2.0.0-internal.1.4.9":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.1.4.9","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.1.4.9","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9a994cc564f9deb69c4b8046b856fdcbb046006b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.1.4.9.tgz","fileCount":34,"integrity":"sha512-iT8xAI01EwbzfvcEObZuZdIVMwOx2Zp1F7rvV7DXjOxXvc947UcLRORLoJw+O+FTn8mdSh5ABOBp5hFedbgzWQ==","signatures":[{"sig":"MEUCIQCNZrndELPKEaCxLY+1GQi2NRChhpchvyOvZALOEF0IrwIgMNPc16sXn76T/zcEw7WVYDh5cBHOvfh8QGbj8gpDRvI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyIwyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpd5w//afZzKZdmOrctUjKnGoyMa9dDkAhNWMpX9aBHTehyjbgwwsGu\r\n5+hFslEEt+v3TaiDrPzxbvJHYWI6AFgCELzpK9zz1QDVtm18sMP+KR91niIE\r\nQDKDIDwXbQqcqxsHtzhVcFxr9zoD4ZVgvesVN8ia8XtpY4uLWlWHDd/vSADF\r\nEu75wNsIpEL64lTEWaPWqExnR+wt/p2TLInC0r9AAF5jJRpEBInIqpVR3mRV\r\nvQiJCxW1m+lKpW3Jeb7hPa8HlZsb27xH+3JEMrzcmb/kHoGEgBhTtgSLI9s3\r\njYfjOUV6TmReRT1zpJ7AxmU165OohKfwq3XKZsTeLGHg8i6pzGsXLdOONYpF\r\nFJNylJzJEHAMQ7oB5Nig3pG4mdIyFX1c0E+69bpHlomhiaBFM2xRE8fwTVUw\r\npIdCHi0FJrJsVWK0WNsBC87s15kzeyrITB42wJqe2mH3xxExh2UTIzN5x9FG\r\nd5geOXNiewWizQoqsnG61/ywfhfwwOw/VZHSDTefpnYZ46Cy0+C66rs3eH6V\r\nf3xweCHNAjAnqCB6KkhuYSOp1aZM0ajk5gRGC7xSn2izIYiE6y9WdS6p+/WV\r\n+Yoll1ZkWZShF40QeKLSx/fY4J3j4x0yZ4riJ8VCuXubxuz6Ec8cL2i7N99t\r\n8DhzEYuucqrOw+MDVHwuco/Zgj/EZyWJyN0=\r\n=XkFw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.1.4.9.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.1.4.9 <2.0.0-internal.2.0.0","@fluidframework/protocol-definitions":"^1.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.4.4000","@fluidframework/build-common":"^1.0.0","@fluidframework/eslint-config-fluid":"^1.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.1.4.9_1674087474252_0.13071392545473537","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.3.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.3.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.3.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f27bd2557da6c2bf213d2fe68243bd49ade5b57c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.3.1.tgz","fileCount":35,"integrity":"sha512-qTLDBKlmdOKWhW23wpqgP8PaWXDV6xV6G+Zwt+lfEPPLfas5Tm/GJdylH9akJLeRkD8jFh+Gb6frKsJsgqWFzQ==","signatures":[{"sig":"MEYCIQC9a6c72Ys50SHiVudVtT7v2dA7e1cx4ldu8zuRkA4ySwIhAIm2kTvRJd0iKLAjJgGrsINcZiTdZpgM47nDLopDfO/X","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyvhzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqFyhAAoSHBwRyVSBXyVxIORqil4zgeq6mqLakC4vpPAJJFgrEewSLx\r\nVbxwAFt8yBCz4wyMWWVVX0SULjln5hllDUlxqHeGDUTgJXxn2aL4G37t7uwD\r\nTxj+Bi2SzQb6LA5V9rMf7ZvtS5gyw7UqIWvh2FGwyr8R+JErR0+2ivpK2X6U\r\n/tFDx1X8cRHE6epwwZqE9/+7NcEKjsCL2xL68qCxXXs2y3RR41ua3H0dHFmC\r\nFF/cosBuKJWT/0AGV978hQBUmhzBuuHx7u3tp/AwYfh7FIxcoLsTO8aKjFa6\r\nRs4mGzvzCm7FUVu2JhyhnaFJ8kBWbuGPYhKLkfonFdEo325b8T6ailDz1okD\r\n+IRssmsaSg5ZnHbenH/eSKEWkUaFm8Jn09CNzdWstyroUDjqs7d69Z4r4cnK\r\nZddj+xm7QP8naSyJc3c4EivjXg0aFhcQCLTjo6GvY+zD3QbfiQVhMWQ3s/+Y\r\n9G5CGnsgKAkurArl78vXjL0LFTNAswHCYryMhUrw0CDXW9M3drMfhoYGb31R\r\nhUK2evUwMuXXajjXpTgUvU4jLx5f2nbdIBZCCflmYptWayi/LtoSvWOT8g3H\r\n93ZruX1fpM6pa4uYWt0tn7DhXk+p6Wp2r+PVnhqA7ZO15ejnnEyIKWaopfGJ\r\nULFbVTFxgY0q4Xkmk09bwXpjPj94e00JKJI=\r\n=+eWV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.3.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.3.1","baselineRange":"2.0.0-internal.2.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.7.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.7.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.3.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.3.1_1674246258896_0.9510753337400859","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.4.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.4.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.4.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8843b38feb1576d16975f5391b853b8c666d2b60","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.4.0.tgz","fileCount":35,"integrity":"sha512-s3Qj7UBlzQzefEYOmZxD4vK0RFhtI5pgxJT2PKZ9nByhygT+KYKmOryzkUS7KwTzfsa4kIwPF+oFmT1AP/LohQ==","signatures":[{"sig":"MEYCIQDe1wUELXfADw+FFUSqwC57f3ep4/UDNbu1/tWkolMEYAIhAKtacs3Jfs7Zg0H64cCJEe/opEI89/1VpBcuJXtbJDhU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0aqpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmom0Q//WXL//k/Z45JEdZhwQaaMtmV+KPQj4ToRxTORpvAtwXNoXhHE\r\nFtu2bqJuV4+ny1adOukRvWqqRFaVHNxf2ao+kx1u0ctNXKVLUdj2pSHvrAJj\r\nJPNBfRG+EDFLyldV2sAY8rfgYmFBH8UlnDKltpYF0lbx8OOOhVJR1xFZ9/ky\r\n6NNVMBqYfJODmgWewPJeomD8TMnMI52QKeW/FXqGs+Vv/ehr7n63Ee46F/sf\r\ngeliOruGonQU+3gLjY0zXVey1CT+v9DASw+L5sFOQeciTDR0eqr7NhJuzWPz\r\nwet/6zTkPeELCIc8LN9Qt1mKt8QjdZEVU+OuRNbjN6OYH/Jnvms5S9BmENm5\r\n35ON/C5AcgidJa1hYHvJxG5scHlPm94VHetcUNrQK2vwAFqWvCUFjycLa7l1\r\ngY3oMw+Kg2QxoJrd8SlWpcyfui4MU32lbfrRiABF+YWS7rdGp9+4BRVi2S80\r\n6nuPzhUwjyhZjA0z0KVtKeJ/4HIvbHhriiLx7VxxBZ60dtClzXEpR1yNJBQ6\r\nmo3FidNbpCGw8bieRKaiFFK2JqFTmNo3rIO+ttns+QrHzfZNzszj6WO3o4K3\r\nGEW3Cj6YYlyf0XgGTyu+1s2vDErc/oKUGlGvpEiZpxo1CH2y+Q0SJr801JCA\r\nGVZt3oXHUjjaynvFsOfezJgCNhQLWak9f9s=\r\n=9RQ9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.4.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.4.0 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.3.0","baselineRange":">=2.0.0-internal.2.2.0 <2.0.0-internal.2.3.0","baselineVersion":"2.0.0-internal.2.2.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.4.0_1674685096984_0.4195187766334467","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.0.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.0.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.0.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ebb216952c3d9ea07b5d1fbd6eecd2be87714e23","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.0.0.tgz","fileCount":35,"integrity":"sha512-+3IvBTwbkj3ZClmwpWwSsz2onpWZ3yI2NMzQFLm3O+rrb9NoqFJDopFxxHamjTCD3Q3p7pED3fdIaGqcwBFjBg==","signatures":[{"sig":"MEUCIQDHjk+Z/TNHgboXcPHxNv/HCL7WeG7Cyh2snssihXKvBAIgHz6l2/jQUfwp7/PC0A3DdQb0TW/Nv7wRViQdRPP/FrI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj1IK0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpPKRAAhmsiWMhwPj4JRixpxnhi8WCbfw8rCH8ael0YDWbz0XCaYYay\r\n002IFk9qJOlzvAVKqwfLo3c2WWBStcPJpeOQvL3jsQbhRz7sy09GTMSIA2TS\r\nfXZEdaHM5kM2KjhaV3Heunaq8yNdINxcsrLDsPlvxKnhuf+Ks2wstWYs2SNb\r\numAEcBjkMlYPHIeWGybBKrnCYItef4c5LaMvJwOSa8+k4k3gru3QV9cxNxaJ\r\nrKgnEX7QlX1xCecZoBs5HItiFFygxg1yORHWE3qE5LwLv34jdNTwF0J0slZq\r\nu+SsKrm5IQgeX3hHuJfPBcgCjv4oCwociDkbgGLcOE+ljDfg8b7qgl3xyMOx\r\n2lIhucuO9/YEJkWXuCrnpUdDz7jD6oUXccZj+xzzB+VoxL5NAFp96/+Ge/5S\r\nwsUw2JsVbMoMpX6Ldf5Qfnyq8FXuVyH8W2AKAUp+Lul4Ec7pqqYjU+zySc+l\r\nUP1RCBzqhJkuAT/Cdqs4CvEQyjbfSBgpg/3Xs52C+uIBxKYA3icNqr3UwuxT\r\n3jyP+od4lAaOpoufPaP4OMoGG6kSafbPGWB1h1v/oNs9MsUkLYDgYAoOSHQI\r\nNgWWir9+TDMO43YK7BAfrqqy+i4KEhSKyQRaVxFUi6Dyq0ehY0KWdf0w4j2P\r\nZEmiO2rCf14TxNZJQcXzuTNih68aIgDtNYQ=\r\n=enK4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.0.0 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.0.0","baselineRange":">=2.0.0-internal.2.0.0 <2.0.0-internal.3.0.0","baselineVersion":"2.0.0-internal.2.1.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.0.0_1674871476225_0.8426041199609782","host":"s3://npm-registry-packages"}},"2.0.0-dev.3.1.0.125672":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.3.1.0.125672","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.3.1.0.125672","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9ce4bfcd2593385e39de39a3f9c02ad6d9b4c0c0","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.3.1.0.125672.tgz","fileCount":35,"integrity":"sha512-R6yl4T6FvweU7yq3YphDD8IEB0/48MsZf485HYu3/U8879mwzZ3nktdA/lIMzXirNQ89ZYE86N5liGTjNZaV5A==","signatures":[{"sig":"MEUCIGHj3PWSJOOj6JI5M4dMctINA526qfSPwx/+8O2X2TTaAiEA2HzhWcWmbtd+uWg3mWyrwYrgUT9B9FfNq3k0wdRVt+M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj2UHYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmowOQ//bv2AbKhooGmrPKb5AGv+tggcmjkNUJgKTCUg+RhDT7W+MW5a\r\nrF4/1RYOqxW17Jf6XLVFDuZHOKyhMRhdBZnkL3zdNC0eEFbO9M8NC1IcV3er\r\nnNDeF6XxE0EyyFbz185q+IFspIYBHQ25yo8wBO+72pZloX8VKTwuwQ/PGSLI\r\nOsFba4P4CXgpvvNLEMkmLT7I8Luq+wXBNRxFcfcjvhuWHZNOS74H4sz2j8fs\r\nDbSHQTd24FJEtULl+7pkNcJ5YfXpUG0/kgqL3a4zYMQ57EDn0W5cDznfi8Wz\r\n1hWaTtw4rSqCQgGjnU33DyUC2nD8vEkFeSe7RUcfXcRyxAu+dIWLkBYm3wKn\r\npVfR39lvG9gLvnyrdQiSuYjP2Sc5gV/Qg9dEqqBvjZe8wkeuPbR5q0uB6cqt\r\nXpZOVv+XYfYVH/O20UO0IgCrS1dhx1/eXergoE/mGnE0hx/YfVKg65x8uqC5\r\npYb2bJRRyaNUUVwZno/PbRoMrH2H4Q/PQBucfZZT4YajGUBQl5vIZQTv2lnb\r\nuMeZkX7kfvBAVlZ1eWiRcUPyfK4s6lZVdKZB+2uRJusPSrDmIrGGMGqo/eLs\r\neTIyyG5gAr6I/mb0x9CI/iBC+fKvNs79Gpd58EMGw+eSfZGVDX6MIR59xaa6\r\n0HNmfPj8rC5JOXx9WgOOVKs23puJk88RU44=\r\n=Kp3x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.3.1.0.125672.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-dev.3.1.0.125672 <2.0.0-dev.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.1.0","baselineRange":">=2.0.0-internal.3.0.0 <2.0.0-internal.3.1.0","baselineVersion":"2.0.0-internal.3.0.0","previousVersionStyle":"~previousMinor"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.3.1.0.125672_1675182552121_0.8403984995770586","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.0.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.0.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.0.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a859a9c3e17f732b5599a235c51e500999d5bd89","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.0.1.tgz","fileCount":35,"integrity":"sha512-X/EqbaWdPZK/CjZbSX9sDtS97mQr/7bA8BkqQf0Ij1VvFdxFc3S8aJZTW4w49fxcvb62BUcbcpu6Yjyc732U4Q==","signatures":[{"sig":"MEUCIQDNFJXf4JrlwbiA5Y9HpD53QjOwfKtRDUTs//esSOkuVQIgMt+7ppyHOA9YSREl9BeXv2jUWmc4M0T/gu4DIcMWEpA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj3Z/hACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo1qRAAiFmVZztYC9L+z0ChhEhpAtU00A4OQU9tE27nYQxDffak4N/3\r\njjW9m9Zcpf2fYPr8WLWlBcr4+lOGi4nCI3/Y9X12jp28XNYOE8jVq+4LAOJ7\r\nEqFVCp7xs4qRKhnczgimCTDd7Cfujfg5LKd66WyH3QkLwpfnxzvXbLkIE3Mq\r\nujmnry+NnscK2cbM78eNn/kPIyC7b92++mMKcLMPPo8fqKJpaFZxo8t2iVT8\r\nVE/Cd62NgbpdMD2z6dWNLdeGXcAOAVjRydLpsk5It0EVN5eeJm3eKsiLaONF\r\n5MpAi4Mout7WALT+J2VdEfykQ9A+HeZzEFmt5wQbkAZU5gCU85N9XJ885ziY\r\n1gz0roqmsUj/riLRACzpyli03td84gYdYklsxhvWEMzI6ZPRALbI+UJczfYl\r\nHQ8fKP3SrzQxQVbuYPvPIw5MpNiy8zlBGEWCH9SjE205qeeVSczWCxBw7uik\r\n/aEjs4FR6RNEiThjfOKFV40QJpttV7R0DXzUqef0KxrPjSCG/iVxbgH/kF5Q\r\n/X9EbSBNjkV4V+HzWIBu/X5ZsiEgLZD9XdKioPezfQ1e+NuEU4nB5+JKKvph\r\nzIJFO3Dd8fn0RiZsjqbH2pzEaW/CIaCkZ9mBVKMiwZwc56sMVfMMLi+Xw9Tc\r\nCOLSSKLzVoAUSM1deyHEHNs3MYexgFQr5kA=\r\n=D/bh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.0.1 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.0.0","baselineRange":">=2.0.0-internal.2.0.0 <2.0.0-internal.3.0.0","baselineVersion":"2.0.0-internal.2.1.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.0.1_1675468769291_0.9698046099170909","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.1.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.1.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.1.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"63ee3facfc4e50a5ad5c7818fc8c4ea7b6853f9a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.1.0.tgz","fileCount":35,"integrity":"sha512-sZamfGoIjw66byikx/oAQSwc+ZspgZEz9jvAxQ1GF3RFYgcT0oOr8oefQ9q9EspdyHESaLudSiK5ZcbDB48dEg==","signatures":[{"sig":"MEYCIQDoJ45V72VClNZhPROEttPc+/o08b2dCmF3CVRZaxeucwIhANDjIPZb6eO8mRRNTtC4pW4mBXAGwAdS/OWnEzcebDrD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5ez/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpVJg/7BbxuQXJDcohopO1dbrXjSN5Nn4bTpO8tvkxGy7fRC96KL4iq\r\nr6kuP6/2gjRxuHbJiojOQiCNUK/xOXFyZbBEqrZBGX5Rt1/P1cdmlzzze9Vh\r\nlTmgXUf8rgDo/m4td8FHZ7vFFXE9GH3LU6vd8d2KL1yU3IP03EC/MtGy/0/5\r\nJsOU+kTZdPNCQsidwED3tYAgR/aMh36VNTdCR6UYhqHEs5eDSuhoC7QMirvU\r\nV9bVHtSGKNCBlLohE+xE8gj4kSe2zBFtaBSZduCOa6rhI3XxH4TV3o/XYifq\r\nzamTfGH6K37R6sY/p98b3JqOC0TUKAiZRdoZhSMSzz4w9CMzUHoFFvK+I0hU\r\nfzcxrIguY/hVP3Wgh6JczNsCgUgJkHMNfeDD/ymjgxGR4rb6gk9kSfCKQdAs\r\nf57AMz+T/pEac+ECgGoMlucXzm68famyBTJkLK5FdDfNgguz6M5MVQs58emD\r\nEgLV2gXJ5BtBK+5e1kbC4WJZgEdo87IwqLyg1sfdtxmujE3ButMfQKERHyNh\r\nE0U4ihtYeQSBc1Z96jzfYuzpXOOERRF/bZ2YOAMfwD4uN2vvA1KVaViEns6W\r\nYNdbEoLRbiK9lT6eEoVgfg0OVfTYdTVYptl2cOAcvhSpVtDEnIRg+OTJd89y\r\n3CVMM+pL+oMuTzM4P1RCjTmHc6/FrlFN+5s=\r\n=naDN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.1.0 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.1.0","baselineRange":">=2.0.0-internal.3.0.0 <2.0.0-internal.3.1.0","baselineVersion":"2.0.0-internal.3.0.0","previousVersionStyle":"~previousMinor"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.9.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.9.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.1.0_1676012798914_0.6761028878155071","host":"s3://npm-registry-packages"}},"1.2.8":{"name":"@fluidframework/test-client-utils","version":"1.2.8","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.2.8","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"18342b732c6ae0625de7eea28cdcaaa2054c00ec","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.2.8.tgz","fileCount":34,"integrity":"sha512-aMDZcFgMSiF377wbjeikDvjA3F2ECbKP0mYfjTgcKiISDdG6+aM58AQt/3Sxa/rTXSJkHHNvh/xWVcZFKumBmQ==","signatures":[{"sig":"MEYCIQDoIwkSq6b6+IR7tJLrnW7JLP24BPyU3xlaT+ppeMU3FQIhAOe3XI5GYIqBoRBtksCy738mEbX1c0ark1Nqtx/9kNOT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5o/OACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHbQ//V/TzzFTMucbZSTYs9ipiEbWdMIat87sDIZvuoMimBuIW+Fb+\r\nmn6IxQucuGv67PEL6b/fT1vSBVFjgi4mlEK5VhbQ1T20fZUAE6a4z8jqm9sU\r\nRRPEqLgmhIxHAfU4TkBrXEnZ2D31o1TgXPTmHSC6rRvKnNIR3ZfgOOQtTRqv\r\n9nYNpV1EfLlupNQv1i60NDjWCgn83G+YU6mh/xNiJVZer/RptNwc32CeDWVu\r\nkzcLK/Ja9CjmzuI95ipqAo3B+HN25535rAxBVXj6CrbrNU79VBwJXr3FFFWV\r\ndoUXC4ojGdJww2bEQ62nZmIRVC4ekVohbqavNBUIKuy8zR9bJTjz7it/XP//\r\nxof42mSX1wfQs2m/PoZN/xuG7Qh+NXwRaOYoLiE9/BDcf0YRDBtLM+TnzJAl\r\n/or/rwacs/fd7FoOK9jFPDGT5vs37Fg4cjFv0GDP09WYx5GnTIoSbEnWFZmN\r\n8oZLym/LKxOxsjKgxQGGlNvv8GLpT+XRIrQJ3rVP1AlfEzEQbdUBj2KsoS40\r\nsSLlKedTpS5uzRUIcvnZ8xajuZzOLN27mBBi1lgE1sMEf7DRa3nxVNO4wqC8\r\n4S5gpPlmYt0BNcpm9eHJiFvXqjZPy82KxRV5e174aBnSMgYwDVQ8vhFe1cC9\r\nhx3OGXkRid2BRf9Q5XT8EQ8X66yi0zjhWp0=\r\n=1iz0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.2.8.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.2.8","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"1.2.2"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.2.8_1676054478660_0.03863027118298801","host":"s3://npm-registry-packages"}},"1.3.5":{"name":"@fluidframework/test-client-utils","version":"1.3.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.5","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5d033c6471eb8f795b75cf5a4137ee522c96cf5a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.5.tgz","fileCount":34,"integrity":"sha512-IrZ4q4nVRH1KTV1jRaHelfZvTVpSZIFsmMua78Etffwb9rE+IAfQTLHw+GhyPRsT+5NfFj5xEMDeAm0Gv2lc/Q==","signatures":[{"sig":"MEYCIQDlS4/8kMknqXveFznmGmETZPkaqYtbCVlDvOQC2Fj/TwIhAM68S8hjjqtZ+IPAnXnRC05I1U5Z5nR/wIVcJeyvQLXl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5pEsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpCEhAAoqjqfCwPtXMRhYUTd7Tjw1m24q1rWUmgU58NSyuRgjabbDc6\r\np56YnUABtVA195SfgS3+MR/jpwCn6Cf6NQXb2paN1Rp9QYbUyANAfm1dI1KN\r\nKicuQu370VNqMUj+o51YqBxHskCeVQw3NYP7LPIfK4L3iiw42vJmm6IlcRee\r\nlWiGt3cLsGG0uciTU7BLInIWxBL61K8wzkoJi2S25nuAy+FmQYKpJy0IHfMc\r\ni0N0W3ap0EJG6Ev2n4IFv3VTqMDvhVJ/auZWZV1uqQJ7qly1eIKx/Wf9xX9y\r\nK05UJri7e3SYZ34EbRAh7VapQh3yoea0I/LQRg6c4r7N3FsuREYmquXcyIiT\r\naljVD0bKvWmP7ZxZ/bUUgdVw8xtWacCT8CwUTwIzUozyfeMe10XRiAPFswv0\r\nmMey0H9kJRFeb1YRM1XKCucXnK7oN66Z5sfzgrrgIbHRvVPNWCchDvwJs/hf\r\nAb7J0C6mMFJeJDBFYvPRc++EeD8CWvjNpj+ldzcBj3qWh95ZRiadlTznVPBP\r\nNL1ZtlcrOW/GvWDKy+kOR67mgACrD4CX/NAbaU+asFfjGoFva8IBTMjnCP6o\r\n+M82PBRkG7fSU6MJXqT/0/EusuIHY4NQwqNsnv8LxX68/hDYJbxLYiScGfwB\r\ngn49toQ16yMZ6WEfNYaHiYxRPxfiokZsRBU=\r\n=Y3fs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.3.5","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.5_1676054828389_0.19700529197795102","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.0.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.0.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.0.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0837620f08ce388afc35317579e29e9c51bde012","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.0.2.tgz","fileCount":35,"integrity":"sha512-q/mMn0IS1wAwHn/ivhd4fDCk5DCSKJR2YUiOezllyxmvIPqXHOTNl9Os9N7ayxstcdhrcfIZXpAQul0tAKNpNw==","signatures":[{"sig":"MEUCIAsEZe1nn+msWpEUqWpyMWZp7uitnl+qRB0XsSFmT3LrAiEA5BSZxiFIzaY6VDCdkrDexXHcZG40iIDh2z4SfvV0/EI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj68j3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmplLhAAmnJ77sXEvr5b6uzSZFdWyDIPWgBkbkMWDcJ6FSvpjMHIuSnt\r\nfc+/iZK3e8dfVUYhuVcHa2Y1faXMm116QAtPUlNa7xFV770/2x85+zOr1kLs\r\npJWj0x6t/hHyjR9+BZlXphgQmE7LS2ObhYSzT3oXVIZ46yvc5YCdXB8tkg4l\r\nlYxwvNT7yyHSj0IQYtvBnWS2nrGLn7AxpN7T155tY+u4DskSPnPaTYiAduUm\r\nXPjpfHGWBYS0R3PF1g20qEDnnQkvReZLLDehOYzPQRMnwXLvDfUJhvjH6Sg9\r\nztwdY/MFBkJkO3SEOFLB/8iIS8n+5rJqjuazrgEHwTMO2G+3EFy1bXikmjEd\r\nQhXToDnWrAlQZI1Em3CIGsqyYvzrH7jtYaKZNIBqxIERiI9XNVonOIz7aLkG\r\nrnfkutzeWoIX1NFi8hD373lYLuheMPBV5d6vOCaj7DsrLt+wX5LSE6NPu6yr\r\nT/cIkYxgbl3VBBd73ePc9CZ1OejP1xZ6pjAnmPhTZ2DEk/k61TLIRCi1ECyB\r\nCVuL09hNuKg1uB/ruIxXtcjnHNDlJfmqVKH/CMjPHgEcfU4LH8cTDOMgPl+F\r\nMraTP4OyOlR9zKCCijaJkhJOS6eK+VIWOWkMaE4REoS4j7pKYR1JTR5pngoR\r\ng4LoZ8RvsgzR0J9QbYngIP3U19lqwOYOAEg=\r\n=LV5l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.0.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.17","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.2","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.0.2 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.0.1","baselineRange":"2.0.0-internal.3.0.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.0.2_1676396791328_0.7426521551579806","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.4.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.4.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.4.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5b70fd495ac1075908fa33c4311f0b4f4255b4e3","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.4.1.tgz","fileCount":35,"integrity":"sha512-RwTToGf6rgmtiRDGYUAVt/y0ulTVAyFsYcm1coG1pm0ns6xjDwGKljDEQqiuTczS5rlOQxKnnDffwrrNsUU2LQ==","signatures":[{"sig":"MEUCIGcdGtZwGf79QYHSJPCnyC3JDuHVp5Hblw+UPbQOhAbmAiEArELad1JU4WP6A9h2Vcc1l/hGngc+OdUX5nbrhUiliqc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9/PiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXwQ/+KClOmDdL7rZJvSnLP06Gi1H6/5AlRkvFebkxcNn4+NIssgYX\r\nE87Ikw/yIatojQzRgSMgXGEz1f1PmNXVUaHbc2Uh0Ddqn8tfYn1684mNZf6Q\r\nf1RKBTp4qhAyyoErXGYJ0SY6wQfL9ramO2o4heLMJxOtjfTbzLiFODt9CkFu\r\ntcD6H/D5c2J0fYDj3ZmVe8wEqPeUnamJPmoDv8s4IMomGGVS7gJ8lOvJaZEs\r\n8Y18QnmT5Tfdb+aSq9fm+87L3b9ZX94mUSHgEGAOhuzXV34LoS7C/gQ9A8Wv\r\n8WCl4OCiMDGmfPbJRm7jb8J/0EphMI5FZ5291vbYIXUSdaSni8lpJ/w5cpS8\r\nbfMD3kggPgy3lnA3OZTGoymQx+Gcd+avFAEh8XkRU49S8ATi0u7y1S6bUCTy\r\n2JTiLPUaw+WuBUyHnZWQPfiO+Etu4zqqit7g+WoyaIpaQFWq8VJnbTRXTVJ/\r\nkxXkEWgnG1ZY//pj4WrjlmyfhC1a2cqybTP8hiPACokqrQ131UX/hDBRCtbV\r\nLHPiWDdmOJO2P0cLTiwH2S6wnoaOlS+zlswr/HvUWMt9jQzkAm8vcSqB2N2p\r\n63Z3H8HJhR3dLBnHkxCws0Y0nAZXJAsCQDls4f1V2icprjnLV+8beRtV9Omx\r\n9a/Z8YQonM3pcb9NvxdR4RU8aAfcxbLdn5Y=\r\n=teRa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.4.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.4.1 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.4.0","baselineRange":"2.0.0-internal.2.4.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.4.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.4.1_1677194209988_0.7352678725257304","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.2.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.2.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.2.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"88b66b038309d117a5b7e980a79461da80ec0081","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.2.0.tgz","fileCount":35,"integrity":"sha512-WylamsOD6oCcOq6sYhU1woplNW/YKyABnjjAOCIyRnrraDDaZEe9PDVGGaomNXuicLGu3oASxHfKBC8vqAGLVA==","signatures":[{"sig":"MEUCIEcl6lnAu9DfPp7K7Mrf+oiJVxQJCqgbcUpsJO/atR7hAiEAk30kT+cISQdFLa/XqwY8/bsS4MDzqbsm56f1vg9R1gA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+Cd6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoqCg/+IeWyU2qNzy04sfGi6zbrTwNuK8GIgodhY0TbH0Sp7ecNT7mI\r\nQlqAeBDcNF3nkJ8j1UWYFiOG8Jm+f3IowGuENaMcFVPUGvyREqonZso9VxXQ\r\npGZ8WB37BgmY7o8DYuYrKdSf2ZOT6MMtDxfQfMUszDXLaDW5inMRHGsuH7uh\r\npOhqxmF3My96+hrEX7WGZMjYwAY2gg7+iRTbqFZ3PiCSyt3/excLDb5AlHXl\r\nSYMLTovFkSwiPH8lo7o73bZoSZp9UfEw09ujNNfMQhmlVZ33ZtT/ofoPd5Io\r\nOFoFd9wO7BalpwnHCswLmbi9sCvtjasVS8zQjBuXJONHRgslkErHO3vxSni4\r\nESICJEpSqESknnqGHgRvFWi69AuqWrhCB5LaYkj/2xWBHsrwI95SthCUHouo\r\nxXDQTIrBd01EvlnvwBU3W+cUpPvP+LdqUY09gin9t0GDDo721b9mtwgoOKNl\r\nRX8D8KMTp5tAPpSbO0pu5v50i8RJm5Ru/x9Tsw1bPNaEQIxuXeCyUyMhAbru\r\nWsN4FRxF75vv3B0uPdY8MHodBkjcP0QP84HbmJj/7FYAcBCGY3NTpUbJvK65\r\nCfFupy0OKG2vOpn08CT17XDRVcT+iI3kfrdiFAELybK3x1/uMOFhAA8u+SAI\r\ni7qnrXKzi0mpEagG8cwEgKXrts390q+EFwA=\r\n=9Gp9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.2.0 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.2.0","baselineRange":">=2.0.0-internal.3.1.0 <2.0.0-internal.3.2.0","baselineVersion":"2.0.0-internal.3.1.0","previousVersionStyle":"~previousMinor"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.10.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.10.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.2.0_1677207418122_0.24972668074889537","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.2.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.2.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.2.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"50d6d100c40a7d16e31312ba4b955f821ebe7718","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.2.1.tgz","fileCount":35,"integrity":"sha512-TgX2JKtIuTpdemh1AOZBacNIJbEx42VDqcOGXAVRvjlPm2CzztOSR4QuHrjZ58GRNAMiUDVhGDTJdNNKMG/wfg==","signatures":[{"sig":"MEQCIFUv+jIDMAEZP3AmxzqUo/xOoJ8eubKWU0ofcneIBlw4AiBS+lwF7aLoo1kJc0HsZXQ5ovd/i7yphCQVpA8vejLqEA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/Se4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrxgg/+OB8oDMJQNKDqB/vjX3Q7/bMnu1DjFa9YEwRonor5c1oU+KZ1\r\nQNoiS5DYMTZDmqC5tz/iqwfkzSjd8OebfH6GO6p04SRu5vwnykzBVxGo00cR\r\nfZ+0uC4zyflORjyTW6bKaFGSC7v3JiAc5FnrIjplJOTrANEZy5SEpz600+ci\r\no2YjO2km0GRjtggVxoPSo96F99NL0YOq3V1uYnZd1zE58BlQv+yb14pOrOVR\r\nSfvWyw/gZPUOC6t3BjNwaXON/Qg9LQl+5pL/6eyId3wJl3psUJnN1rl9h82x\r\n2DgbfFT5lxD0wUhRhFFxGvIuFgzMjMu7GheCcHd3E/JyI3bT7uGGG1fX1L9A\r\nEly9mOdur0yYduuz0CaR7UX5CMqoxJRHPwhGgb/UNEFzYo7W5Hdswor2+RnM\r\nJj/6zL57Hgc/5GE5FScBWpWgu0ycyL6XZUEQiNmEFIF51GdgUScXFc/KqulK\r\nxsvWhC+U0VXzzBop1GC2TdbYs+Uox7IqtkaLrxtgiG6k1vxuSHYS4Pw7/eVL\r\nulPvO1dhs0wF8Os20JRHcBu236B7Z1V1503urWQNVwNLSaMrdufgJhAM2bBT\r\nSHrmnYLAYb/DQDjnRzW3gHhAT5eDBc/AB6asEYX+LFU2ZU3TWWcP8s0E+gYp\r\njdF2v2HtWug/z9oh/y3Mg+uDcxxMfEHczO4=\r\n=6EQr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.2.1 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.2.0","baselineRange":">=2.0.0-internal.3.1.0 <2.0.0-internal.3.2.0","baselineVersion":"2.0.0-internal.3.1.0","previousVersionStyle":"~previousMinor"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.10.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.10.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.2.1_1677535160209_0.9590676773744602","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.0.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.0.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.0.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d13035128fd9f504ea31a98679efca94554262cb","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.0.3.tgz","fileCount":35,"integrity":"sha512-6BT3Rx9rFk5A2FdczdL3mZu9nEfxXgxQlZEGVRfiJTnH937bjN0YVqhqBuQkz6u5z/yJ3ncr2e4mXq03bLlDAQ==","signatures":[{"sig":"MEQCIDF422c0hxXrB2nXrNtXKoin1qTls9e39gctx3NN3I6uAiAW/MJb7DIf6g9HiWQL/O1TRPGd5X253hSWUNUaKuhFTw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/UKFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoj9g//bndGw5nExJi9IvCsP8Rq+p0vE53pCC7ysmhduQCxw8x2esBp\r\nyY08f/NIyLBgXa6n8skhib5VvXIvVv82AyRHXFwjMnrU3msR6/FCtJIVxjbJ\r\n++5VGxyvD+rXjkUrHczDuJlvJFgjweKxuD/UdhNsIuKNETHe6IzF9QFyD6tO\r\nMzo5NIX8m2p0bu7x91hGcvih/UT0pvd6HDJZOAcD0a3yqvl0iG+K4l0vdYHA\r\nOPDy9Vy7ZDF9GKT8c5Js7XQIsXKgaedBqCFYqhtYHpdxFj+Su3v6IN7b9Aai\r\ng3kszjXotk41oO8MHAOC765n1BPM6Vk6voQImKfhrDhW28SwY+/63N7Rz/oV\r\nsT3+mas+7gxrUJAAKdm3ePXEmjL9KalOAOfBHt5+FP8CIscjGfiMZsP724HX\r\nxu1bNPa8Qu085SNYZfggHZdGdEqc7GKGxh54pYhdTZk+UANazrM92Ks5hVeK\r\ns/WB/WeLQGmkzfGB7AkWSmQWNrTKMAKS94VATDF4w5dueClaN6HX1eac4e5+\r\nZm9GCk/6SqjN65SrCRpBf24kMSp0nR0GMqHWp31qCJtfJgXhB4ct+lmi3V8B\r\nTKrtpVsoAkTVA51CYtBM3Czlrd4Ckzq+PT7S4UAg5s1t7qSxB2BBW79+f/ew\r\nmSrx1jrtAD9/c7ivMa1lhCZHFpHnZVu9ObI=\r\n=X2KJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.0.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.0.3 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.0.1","baselineRange":"2.0.0-internal.3.0.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.0.3_1677542021527_0.7504751761664616","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.2.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.2.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.2.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2220e7f2dc96683cbf3187caa44e4856319ff4ed","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.2.2.tgz","fileCount":35,"integrity":"sha512-f/DJ8JgNYcYXgLkGCGWP6J6fAsv45iQM9cpD72rMMcLGHTMEDdUiY4HJK5ltRQNjn6AgaMdnJ/a64DfUjfDqyw==","signatures":[{"sig":"MEUCIASizmLpPDpPQXLPTUD2Qi0vbuNDDp/ZJqRDQGrPG63aAiEAt1RNLn/ezBejJAa/wykYPbxBuU4N4cQ0fAT7+eEdkKY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/pYhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwTQ/9GOOJywdrKsskLv9CDTWb0oAPQi7utyUJ6gbeerPBt+aYG0Fh\r\nB5fncz7m01X1R2IU6aP8s4NCjiaV1XtHf4v4ygHw2twcOqGgNULFwRW1xKNA\r\n6xTl+UTeJAUSUFiRhuR43QzZnmAFL97I8XqRkTH8X3nNn+NP1GEpeHEeetfK\r\n3lPrFgJdd8X90ZzmVbUBqUgDswNzoaOlvC/o67O3o2ujiaPiY6o3qOiopb6D\r\nD8ijWOsVg1vkNoV7a5qEuseLsa0kLUQUYWL2q1b4CMe0ArbWPCGoXeIDIUxt\r\nSbWM6BP2sTva0ExFpnz7kZ6oinmCRu/2DlzT5MTp3XpFwp7sLV0U+s1AVRGl\r\nUcsC3bymBYLXZ/vFXn0kY78sIsYVZzlFSKFWd/GmO42NeqKIYjUtU2+sS0fv\r\nVnoTZipg0tqYMfO/bhZv38SaOlNIdVU1Zl/bfGbmD5SpB+w+cUsyHo5+/SZb\r\nByee/5FxYNqbMFrcRKe7/s5y5887FkoAJ1iW5UP0ahbzmdapeYmXtjtKeygb\r\nPbXpf3O92zx5Zlz373vrkrnAhhKI0kZPV7hN5LOR0YkPsXbSrOFw2o4Jw8hy\r\nqyqWgnnIqSA9SjAI5lED+2kLaI9auEVtuNbsm9QCxZUzhzHI3hklzHtu+RxH\r\nSQVKPd3zjvrpv2UUEDCvMEvPxCTEA/kBSqk=\r\n=S4FP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.2.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.2.2 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.2.0","baselineRange":">=2.0.0-internal.3.1.0 <2.0.0-internal.3.2.0","baselineVersion":"2.0.0-internal.3.1.0","previousVersionStyle":"~previousMinor"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.10.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.10.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.2.2_1677628961251_0.9532582421753766","host":"s3://npm-registry-packages"}},"1.3.6":{"name":"@fluidframework/test-client-utils","version":"1.3.6","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.6","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"c9d5b62218646016b9a7c3af806fd1bf1addb247","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.6.tgz","fileCount":34,"integrity":"sha512-bwF/R/dDhpjwTQPlZvy/nqYApzLaBV7abolBhB3dKDdMPEDDqhTQP3pLreY3c43c+TLvInwYZCXeruAQlItocQ==","signatures":[{"sig":"MEQCIAbGT6ncImEO+OYjqIoI+TNOhR3aF8qXDPdQ3C2ceO26AiBuwXdaHpQarBPRcmawp39OhAcv7MVuJw0dL+7PDxnXRg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCPMjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrnZg/+KXlZIf3vDMZghbpWGhSXjqc7wcRz+r8Dt7LV97YayGwX1Eye\r\nIsD2Au4/Wb4obypS3mwHpl0peMYHfzs4ucK5uUxa2zL4/YNQIfTeaA1GchtB\r\nhJn3ix9Hhl4CzZAjrsMMNwWbc6Uk+ulSfY4QuuWFXfNV2YUf4Q+KvYJ8R/xU\r\nyDjBptPh6jdJPxlEgKADI9f45wlZ6zLjuw6RMNm62uyJb1BfGkqtlnP1MYMi\r\nS0GAOVMkgyrfXULO3Yo2f1tjmHiJ8Piy6vLSiZHZoQzTxoem++4BciI2PyJ3\r\nMF9bLwAMczLxE9Id77bxa7UDXjYqTOowTBoEQfv2BdlG54lkRQ9IjbIf+n8B\r\n4Rx7aDyQJrLdyzvwlFVwEcz5LpjH4CBKmL9Gl2WtymcLpKCrhM5rEopchniE\r\nN0O/6VL/HH4IS27VypddGMfRU2+QIRUNTo0AJVuuZ1+fn6QhqxxFMLn9sOfD\r\nd0E3OcGAuwNQyYm6D7KKt/4xarLDn57Vx+EUvnX8AjDa5hlC98/Gcp4uEbzC\r\nlGbyY0eUbzBw+zh9qyN8Hv5/syHdmUjBSW9unfD8wrimIQwHCxB+NH1Dl5DU\r\nUvHUKq2BOYM3SUe06lLq46ILGwd+NG7f3rQOJg14hn1T0ovTRnQ9sFE3MA1g\r\n+HPeTOFOSP/+zwOBl6NBt/oKHfKAX/ZsiRk=\r\n=0DHc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.6.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.3.6","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.6_1678308131063_0.8690079703002231","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.0.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.0.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.0.4","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2659a1c07beb382d2cdae480eae6898d00c418a3","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.0.4.tgz","fileCount":35,"integrity":"sha512-oUn8bs0/IJskes6gK17tFQYgrNWdbKEXqlsRY/EaMs5ON215jvdRC92YdI4oRquRU0ZG967YKrElVe0objs/GQ==","signatures":[{"sig":"MEYCIQCvQYGGbzElmaaGB4F3/ho9bu+WO7wVfxrbQpWuleLxOQIhAJjEIf4W5CSXjv5tHKfBtS3wKkuGHNuZhCN8rRD/u+7a","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCoDiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0bw//RvUdi+EuKXqfhmW6Adh9Vm2cTbvDiGoWiVWwC2Il+28vQbn0\r\nkSr5tTiN2S4zUaJalE1E2Q6Lzjm8r5juyZeruv5lvChQncW4EGKJytg3W60C\r\n1ofKEvEmXJ05cGqllmzZzhNlUz8vYGX85MoP2PteH6mI9IW74PwtHnSH9/X4\r\nyRH04XpKbBNybO3Hp7zrIPmGp/c66bip7RMkaRQ134Z7R5jNkX9hJhbD3HFd\r\no/8Maqzhj1NBi42XIvSEtoRHO0Cv6fyS3dN41rGl0X0HbMIGwJTN6vKih5P7\r\n0YYQl3HT4/DEngm0qbcvP6rNezBSQTUdSOaqfoyj5JNG3RZuy9XtAINn+AuE\r\nfT4WH5EYHApBigC75Jd4YdX+HIBHtFMjVReDCRUpmFT+Zjn6RGSf2t5EF+Bh\r\n5vcBzylQf84TFu52OPiIr6KFZDFXq922LU+PbZiW7GNRyKdxsQU0b8gBuPr6\r\nXDVDaOIc4ec4zk+QfFf67skVzactq7aEON1KeXwSeDbzfyiWgNAKJ1YZOAJO\r\nKSFqPRkGjyjT1vYZcfzD70e6X84tM57kl7i0zQCvEyawwaS/Rqd7Yd/DKM6g\r\nF8I6d7uIO56lu5EUnW/pM1ks9wPIdjPPrxS8oK31WSiaFX0n9YsajvXibozU\r\nyll5NIXS1xptWBVme9hUnazdS4oePnaM1VU=\r\n=+zaj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.0.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.0.4 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.0.1","baselineRange":"2.0.0-internal.3.0.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.0.4_1678409954679_0.93084625996261","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.3.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.3.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.3.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8ca09709ef267392f76c9e741b331556f86cb17e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.3.0.tgz","fileCount":35,"integrity":"sha512-PDcp0HWK3fJ6JdD+gqGI3PrCUk+kcZX3tmOenRpAbzEgm1aUAqoyJIHs9Jd4fVBvLIG+tHFGWM8VzydtwXCdyA==","signatures":[{"sig":"MEUCIGzyjlnNiP+8bbNLP5RG3POQkGoIOj2a9+KVCZLVAQBJAiEA7zQdzfqeRT3Y+BQkL0I44OsRUZzK9VmSN1CLvags9h8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkC5NEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2uxAAg6gtok5fYYFgz7sLSinV+Sj8XuSaL9d7aextSenu3PRkzZwa\r\neqNBexfM6CMaDxMj0pp6tFzHUaRFXQDZbFVvQYW483rkQHAQ9QhIFs+F5JKO\r\n7ZE6ACAHLlynIqmYz+zLmpXNdfnxpDVUuy0MkFYoW/ygkL7yBwVasw/NSrub\r\n2v8mgZN4qTjNMkQknH+MI7aV5IHtnAABL+i3S0oyN/pCpfgJQn4BYVsgVGqI\r\ncUzN1Fs2ge3iYpiMlp0ltTL1xsZLnF4JUM3U+o4rhhof415vG3+hWgqxcUrk\r\nfBIG3WHecbLKc3XcWqLGTc4BVuSBLSzgGHZzJamdanLdvcpa4uJNqaqmfJUi\r\nwKe481jxJesue4HDgy2uGXtxBYpDinG4/1CiOyYbSNN8JhohwywypKJks8CQ\r\nZYZS4jn7nfPiUL0qaV3b1q2Wufbbs6h/SkFGpv/GEXgb8wbNImCzOfdVYtSc\r\n8DP/FEmHL/qjJVJOGVtsn4RZzPurU4TroK/OUZel1sMhY02mArqePLtn7Sd3\r\nQBB7z1OzFChj4dKcJ3Zk1qe7ZsND/LnBjqL9MS/9XF4a2Mu9J7jAOAXB3eGz\r\nSYOcz41fPp5VWNSLQ4esSyu8kQNv1i3bg1uPpcLbo3uL4HUOuvcjIi3WiXGn\r\nG3WQelxi8WhuDSIxWalgJEq3m6cJeRn9i2g=\r\n=SNxx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.3.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.3.0 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.12.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.12.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.3.0_1678480195725_0.185280432486161","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.4.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.4.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.4.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"003dea2829a5dcd22a7566ef87adcd37a8aa559a","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.4.2.tgz","fileCount":35,"integrity":"sha512-LqxaUrks9Ey7iMvD36qGpF22mA0LfwtBNoMSzfipBEdo6+jH5hiyEzMU9+A5XvrrgIoQkuep+XaXFfv8ZY5XEA==","signatures":[{"sig":"MEUCIQCK7EZ7Y3upnL071W/P0W3U9LawWSW2BDc3QpHx7/16lgIgd2CVpgeEgYR5ea93c1+ZW0r2wLRcJ4zii4ToX/RCz1Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkC7cjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsyA//b3gevJSxWWeMbmg38VqoGELebGnB38IAXQMZqlF2Gx6ae9pA\r\n004PDToN1+ZT6O2TNwT3LZMTFIjYfhUxZl+MIlZz/gyMRJbEvHgn8jfBruTC\r\nZb8iGIWffTSxWRO6fh4Oux/HtafIygpUK61yxxexJzUI8IkcLYDVcTVASbaz\r\nNVOYs3OejRSJAe2R3q7yQVRKQJstiwLvnecOvmtnCBGzcMPn1yVAZDOmhp/t\r\nJbG9YKD1qpwdt/Ca0kIOFONh8ByQsyjvBSV+8KDmGJjCrEIl4OoIfEXkLccr\r\nmBGp8p76wAp9s/FEoL0EKmfkOa3U/HwiT4EFJgV9CJAGTGDWxLkzq+V4knFT\r\nXsTirkW26eqRM1IBNxjZ8qSQqc6uVm1Q0gvJClEBaxxk01PbFHBSecoSOfGg\r\nwkkS5h+Ytu80pN0gDEr8pbg5t0A7EE/X+ZsH1IkQgYGc9Jj7rjd4o0OzbqV6\r\n9Ee/ddqXAghsTerkcF6tXB/OFxbGOUbfX71GyM21/3Sfstjsb2MpSuljHL/b\r\nNtFtleHxh11SieDNikvQoRtCIP9AwEULlgDLzE+x9nPPhFGVi9vUuj7CrUlx\r\nnn2fL1WjIYneGdiGH69c8psaUluvqGkAqQDlgRMQV7CBGPpC1DpNokpRE5N9\r\nxRZjKoXDS6SmB7cgVqB+gFLdGvGhKUI6Q3c=\r\n=ZQ+O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.4.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.4.2 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.4.0","baselineRange":"2.0.0-internal.2.4.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.4.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.4.2_1678489378783_0.8776310154613949","host":"s3://npm-registry-packages"}},"2.0.0-internal.2.4.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.2.4.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.2.4.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"38ec98cf8639e5dc8c52383afa96b3f9c0d92deb","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.2.4.3.tgz","fileCount":35,"integrity":"sha512-he1IJOQhV86NSHBQ6CMaKL1kPMEYGp7LOYa7XuNFQNG5+POh+3eHpwgBDKekj9/RboRm8YLShq3lVAsFI6EjfQ==","signatures":[{"sig":"MEUCIGI4su9o0G8yJR6Hm8k5aYMf/Q1ce13mmCqY3zSaiNCSAiEA0wB/aU/OZBULNcmeH+Sk38gtT10sUNHnHRLfMuBdPYM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkE3bJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoL5A/9EByDhLYRPaAe00mRedi5P+349WF7s1YW5hS/CJqWs5gRQs8c\r\nGvTuIh+FPst6T6lde46kcSR8VH42Za8EvY6pAE0XUWGb4sEQDqpEg08joBwf\r\nys1fWVcMZMgwe+VVe2pK6L0B3KZoC7SQynf9QG4kM/no2WoF8X5Zo/42evbv\r\n2zGcw4CA2DAXbh8yuqR1T1OeFIf1AYxED5+xRM32cGhv3zoZW3y7dQa/YYxI\r\nia9xJIrrxKVaCIq2WfaTX09smPv4abAIBTrvFf3LiXN8TXv7FO3rh/E1GOHT\r\n3RzcSnW+XRZvbNFu2wyhQQduysPSNPZw5l7WfnaxptjoAC3n5aUuR4MmU4ua\r\nFY8BXZFEp2LOjcnzynMn8Z31J8Q+JXP15GRgLiNko4dkaWr7N46atk4G4eRb\r\nQjXsloTqVaThJbzNuyVzvDRejW80S1whfS3ZU+qc3agYU/qwQjL5eF18h4v7\r\nxvO/YwqEyexdBp+3jk8wFALbf6etU35gma8ZwQ+uCBycB5kwPnQj9sm6JP+A\r\nhdTRyXS7etIGFED2Y566xOe31OCa+14xJc05+xfcb8jz+VefA7oVNXP5RXAy\r\ntZpqOAjcrDLG3z9Kjj/a01o5rGYLc15u4n09Usm6r170gD1XHO70BcfTVTdB\r\nQPSSQFl6/xVNtgG57Jj2qZ2dnYrZ1HqTi4A=\r\n=dNWK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.2.4.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.2.4.3 <2.0.0-internal.3.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.2.4.0","baselineRange":"2.0.0-internal.2.4.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.2.4.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.2.4.3_1678997193362_0.1186633414058822","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.3.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.3.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.3.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0c6bbcb3234e1c6f626f54a934169b4d77e27720","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.3.1.tgz","fileCount":35,"integrity":"sha512-xoQbJ0/kTXbAHobFKblydSDSmrsRJg6cRmg2MsbZAABFd28mh5ez8WYcng2OQgZGGPjh6mSULjSOlYVvnyfSzw==","signatures":[{"sig":"MEUCIQDZ9BjDd6qhmV41r+63Bk965Z1c7iTsmx+0nzKcQZDe2AIgCurKrrKJA69UDdF55s9OSb6hW+GLfQ0iZ9UtsBzDe0Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkE6gsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0SA//WsNvLJRQ/+rGkttJ7gXZSLjbBW8SKLQtLTTNtgIm7S5sX6cz\r\ncl/MX78myPBkLTssemK7qUN2ualybRyrJs9mmvwUFF9Gd1ArOWAyjsecWSyu\r\nnavBYZYKxI7jlCgNVoIUQFkwRyWaIq6V7O0JmLJSputPhI1vlxYIroakPJDt\r\nahW3LbSnOpAr8kF/hDpsAREkrNm7lBY+ipBd5eNbCPU7lOZ2yPn6SIfFkG9K\r\nqxraqt4tZqd1t690WO72sOkHO3lA0u52no5jFhZAIcRVOzUMmUzl0d5vaMSR\r\n4yhYBHT68oeJOJGPhiPGbMZpm8MIAuimP6hdKIyAYeugl4fKwfvzFrcft1qJ\r\nxAAKhgu25c+jQebaHuyC96WHOuYcD90U4zceTuxbBhfoiAhoUJ1/ahgW6Jzn\r\nnBeJSZmkk5vZ9WJtqvmIzfJxZ/Ytb5s7Nvcwej4ngwlQERlDFE3IBvmPUbCc\r\nK56yAEL+QfaEC3mrf+srZPsYbnMZiXi5mSuoMUha1U9k6ckuYrBtYk5LSAGl\r\nBSzeBrAWYborRfhA7yLZ3ZwEckeFtsKMPr2MkBbRu98UxXll92KPDb1zSVIR\r\nSn5wK6K6ycuxgJGqm+R0mTtmKtDKg8VPRM7rSPlCUhKmw8xZ58k0nQ+9Jsuc\r\nuhY4RgBbGw7kBFDNFCl4FtbfHtcuBUnqW1Y=\r\n=V7RP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.3.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.3.1 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.12.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.12.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.3.1_1679009836079_0.0968509834666571","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.3.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.3.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.3.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a5d64b942f2e112ac0ea91c2ebcd5430137e7d58","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.3.2.tgz","fileCount":35,"integrity":"sha512-MpKnPmjvwqLWvoQ1dCYWagKtwijeG6A8m2n0BDQXo5c3qE1HBN/SoDD3mNgoHDI2AMKB+WQwC3AdWhqMXfGeVA==","signatures":[{"sig":"MEYCIQCg6/P7qUXRi3QYZgK+JA5Nr8YAiZqcgQ0gd0otBR6XvgIhAKBFgedtzbBpaoAoWTRP+Fuu/GxKGsGruGOZf1Ua8j4N","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkGQH+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoqHxAAnAyG1gQWL+YSPDeAq5PL3tUm8cPD2Zva4ZaJJGG0X65YXN8z\r\nYUz7PYlU7e4FAAzqjVE0a36p+pDXItDeF2E2nqJ82fBBBOyqyd0EFfgpXQVn\r\ny87rK4hRnqEI0CjJWowPpah/6uJCsgqO+Auqcjk+cEYdTLFbKMF3kIBXCc3O\r\nICVP0Hphb05efEU8ru5D1Xmu4CKOwtxQcxbOvF3UU1HPGjYYVjHFWIWly6pa\r\nUrltbCnrJ3d1wiakBytxkypMYOkYR+BAigtwLJS/9cIRoCBK7O6CuCNDXMQ5\r\nMJmZXGqveRHZoEzVlrG/pPx6VPxQA/e6vuaDk5I0G6azvyFdmhcgOxqcD7FX\r\nscE1O52M2Ho8aeJFGT3hnNV+0pinACipIy+RK0T8QacgVNkN/1JWmIN0ZaDi\r\nVLcCxEaHNPjDeerawD8Fg+o5lPLJ0GRXBqn4Qnj4uCvpAevhN5+niFJdSUWY\r\nebYRinYFRNxpXKXXM8XaZCfI6knFdvb589W3isn+xPBGeHgNB31ewAwP3E71\r\n2m6yd4M+ngPz6anIu0C7KNTC24asmZk9WGp7YwYgA2k3hCVyoHI+mAoDgmCy\r\n6bwydvkIkdDYClPidbFycn0RcEXGq8FS5PAx0MFHr/+21qWVkPQU5mIJjJ39\r\nilJSU/XbrnMkoT0wn558HxcxrQAoGCwERuc=\r\n=imdr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.3.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.3.2 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.12.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.12.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.3.2_1679360509696_0.6155963916362097","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.4.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.4.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.4.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f19f778a45b4ac28bc00bd33b35ec084cbcbafce","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.4.0.tgz","fileCount":35,"integrity":"sha512-mTBrxId1CBAOTxeaQ6dyClBj8PXL52bXCjnvMK8urjtxU0SdNCCgEVX8KHCHgAZkRXxybCnsVOcSxZlvq/Zr7A==","signatures":[{"sig":"MEQCICZy7I2RfDsluZjbJJ+PE9QO9QbQhQ+IBdY2KhCjV5VLAiBzmgCTwcyTZbVBw9/hk/WVyov0MS53M9ddtBV4sUdckQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkG3wrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrzXw//Z9TNRTatSrmQJpB5mbrvRS1V3ZrZvFrgxJwNPU3hF6LluARR\r\ni+1dZ1v23oXH0y43MgmLRbx2meBerlCAVE9c4gh6I406VJBh/cX8JjB8OBTX\r\nDD/GgzzR3kgxeEyRz0Z7EtaQzXSIbpQjsax2KWxo2Ya1HVggtCqCRnsqKMKn\r\n4J2QLz7+cwI4GClscLVOJJfiqGd59OubNqsoRyXLLQrjwOy9ewAbWFyObubj\r\nWkPp9qMbwj3uBeSgkrXsYyZQJxUuhxponcPeSaL3PhtHO1CejQPPgB4+q6NI\r\nhsRVPF7sP3W8VvUFQNO+5gA0klxCBKz2aE9mHWABTkcHgw994kRkAtyC+l5Q\r\n8mtyiItr2ltrTzOH70Blx2niFxv+vOfDPjrjqDPoWlf+eUVUqIsKF0ep+f6a\r\nFylNqJHRV7htCIChqJTPhJ4Gly9Lvbs6hl8HRRbsz6DdsGU5HZG12N/N6zRS\r\ntaPBVHH44DXGwhBOSEmiXHUZqO7jnv6ho5lKO9mZz077lvRyn9eVop44m4kk\r\nRrzw61Q4cqJgxdVuMqCgOJDVRN5j7g+q5OmxkvMG57OOa89gXy7MtWBaQdjy\r\nP/b0RUeECosfmB9WJwFB0Jw5pqoXoBfusGd10Wy0pYaj3ndfkWOn00DpIEuC\r\nykL1xo1qV42VoD6JApLk4snsyMrPChfhaC8=\r\n=Ys0D\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.4.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.3.4.0.tgz","_integrity":"sha512-mTBrxId1CBAOTxeaQ6dyClBj8PXL52bXCjnvMK8urjtxU0SdNCCgEVX8KHCHgAZkRXxybCnsVOcSxZlvq/Zr7A==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.3","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.19.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^2.0.0-internal.3.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.4.0_1679522858740_0.8396668980252651","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.4.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.4.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.4.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e366c6ddb0e01cbb6e059cdb7831e1d7a1117516","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.4.1.tgz","fileCount":35,"integrity":"sha512-GXRfqNG2120bx3zZ0gOWXwonTzo3aJsb99DhB48njA5Ncvuch16Q+mf8e+kigKyddyFfc/1Xw8cXZaNN7P+HNA==","signatures":[{"sig":"MEUCIQDTJwH56aGzfcP1IAnbhzBOk5UO3Gjj+KtaOtFJ8wVCmgIgL984u5RpoRyH2iGZ7ONZGjz2RXL/d7RtHf1udxnA4Jg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkHhuEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoCgw//YALT5tF0/zvQageq+eF6rBrpb7Mu6YFp1d/YwNvs8gYjcyT1\r\ns0v6T1R+3PKB/uFDRs6H2YQqQ7MObmRqOJg6Tj/DajmEpdef0h1PYIcnJkmT\r\n+NwhNYBFS01eUtz9OUfHbbBtpqDRapGupHicVG+2FAcMWoMervF7punhaFhp\r\nLa8xBYFce7IDcGd+Z5rdZWLf6s8mw0f5qngciRgnp14h0xzYNmYvMykVOEML\r\nP7v7iME/Cp/Ysjko4dMQdV/EuFvkBBxjkW4WuoG+GRfjkypOh/CbzaY7tQki\r\nNI0Z+4eqIIpx2d2HMLkOuUsGLTNCl2RuJnL2i64aZ1ZU88X7LvyMT7KEsenL\r\nJaA7HwgGyhhzJ7PU+fHlMw1G1Xr1qX8ZtDY/uk5rH5ym6ZmIjCV2EBeam3my\r\nBj8PJl1aQOuTKnIjwGZkJxHj/9qLVln90pxMTcZfLIMChMImAyAN8M+2DekF\r\niMK0TN6f36ceQgynx3m9xrCL1ldjtwphsFOH4q2Fc+Sn0O+/XaqpvRxyo/Si\r\nCplCcSq3e9PCjrraWrvxHYhDNI6yZBiVO2OoS7uuzSH9pbYApy6csAdJgXZ9\r\nw3Dw8Go+5fgfiFefD7y99c5nGop84br8Xq1F0ACJDDSGitQrBwxAO8NxzNzY\r\nflTMts3RG46cMmIThvTj8+cDDeZowFJMnu0=\r\n=2/6W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.4.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.3.4.1.tgz","_integrity":"sha512-GXRfqNG2120bx3zZ0gOWXwonTzo3aJsb99DhB48njA5Ncvuch16Q+mf8e+kigKyddyFfc/1Xw8cXZaNN7P+HNA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.3","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.19.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.4.1 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.4.1_1679694723925_0.2649334466224258","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.0.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.0.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.0.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"842ca3a90a1388348231cafaa0c8b5d3fc00b2f5","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.0.0.tgz","fileCount":35,"integrity":"sha512-97Ml5+f7aDgObAtUmzbd3nDSgWJx8HOmAdG/QTMsyuWJ4rNQ7JmaBtECfXQNrPPSklddF8mUpQBmmzhCufNybg==","signatures":[{"sig":"MEQCIC+dTgsJSQGf4HsBiddiynz1LhlyeW7yUq69fTLwgH6uAiBwL7W6FVmSrlRziatx8FPjErIJKqXXwhHq1RHhdR6pPg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkHiLZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr9Fw/+O+D955WPrQy5Okvphju83LAH5MLDm6KYq9ekbiF47Ii6x1H3\r\n5MRlPgZp15NVt2LzDOFE8sGA8V20SG/9rMbZfyh4lWIH0NiiLMUDbTgxT8rs\r\nqqgjlhx4GaIy3w7zXjNhqBPSPuEsaBsIkAoYTSFQIQ5IADH2dRcpfiGgv75D\r\ndnaU5p/KC8pmhcxSlKIsAkBo1O/8EO3AMJO8Ryqxf4Txuu/lnrXqGXWO3NEY\r\n2qI+A5mlVSq/sAIkSK5yUw6kmQ/EaYKk7e20W9RnlZbvlmfTIoW3PyqB3mfp\r\nS+AWpxEPasdn3Wri0ZbbEaGeKN9ma7Owc4u+d5PedS3q9Nr1Dh2cOK77A5fM\r\nN1TPRbKUkDptdOOG9Bi3Zr7z+oYKbl7QIEwbs4JaGgU3WRLny0TEgSirZHvv\r\nzBtoX5Jnab8jrivbbFZGeTsdy02JMda2CwcKJIJaHzeBxiic1YxqLNzdDZWz\r\nSCZSC27OUZWC3RaGRCsoNNIPTLI1VqM++51X9tebGSeRTotQ37NX7fi4s+IM\r\nBm23gMM0DjWLY6z/NnDWNprHRyC588LsIx+0XJteTcpTpHOh4a9aCCLDBfXg\r\nl9NxL3UGw8HIXRHvDpwnTwMEphtKwJFRpQLstwLk3d90NqSsWDjuFUcNj3fV\r\n+4YfXluHOzqRBEV6UC1qN7cKVVBN4gcodzo=\r\n=EsEO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.0.0.tgz","_integrity":"sha512-97Ml5+f7aDgObAtUmzbd3nDSgWJx8HOmAdG/QTMsyuWJ4rNQ7JmaBtECfXQNrPPSklddF8mUpQBmmzhCufNybg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.3","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.19.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.0.0 <2.0.0-internal.5.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.0.0_1679696601645_0.44403191811002984","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.0.5":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.0.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.0.5","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ad8582d3eb6158f0e2e33e1e96c88ac35e11662b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.0.5.tgz","fileCount":35,"integrity":"sha512-JeVH3ueFu6vS5HG5vYtKGHQ03ZAvSk574PRWfjqxfM6E2mQ9VV9KJVfBE8oofgIMVdThpSA2ycLT9tEK12lywQ==","signatures":[{"sig":"MEUCIH9EFNpBm/qkUKrsHTlw/rzzbbFXyra7+uyCoRcjeV38AiEAwU/ROjp5KSt7rt6QEHRlSZ4k1jlHMHgIB1Ap1r4FF0w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkHjZdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpdEw//T6g72IARss73MNp6t658buRffV3btjd/GydA76wkzhzbiJIK\r\nXRADjZOWGVDmVPoPGSrsffAWCZMy6o+oTZ0NTOS+XMwAIVPOFrscHawrxFPf\r\nNCZPzWrai9Cb41b+4y9fqUSZsrxsm4zmFGZKQz1IXl7ryqem74kF/ZmqEeFn\r\n9vunKykJO6ZTAaRXgPhzl37zDT3wGjfsW1jmX4em9Ou/Ffe76IbF5Rn1IfRF\r\nUQo6NA/99cBRTdamqyEzbA/zMYWzntHFareSTmhUiOF/LwR24//gkSfNCZxc\r\ncXXjVFZBv9JTUc0/rGJnYFF5gwercAzdSPucy1riquxWBuYp5/EjqgganQjf\r\n+1gBx1M24hx1EV3jM+eujg2gm9J3Ux3Ys0y0MRTcMRw4BfjvqX+LnrlFPKWS\r\nMLGK962amIUUDrYWlGobalzxohwPppLCxjpT20buNCZnwNSqqNc6QYGeSz12\r\nQTkzWGagDwOIrOwuh1n2XGU+kcpIJupVgYRT++1YnuPp06vuD55lkDRPzOqo\r\nGy/pNVgryV99khGK7cl7XmydZR8IX0x+pj05047Im3x2gexMPpBQl8NfiQyv\r\nTijiasCW8oe3+gaFYl49kImkIWQMjkry3gJCCa6Cf6ORJInGrOv4cI8+tDFA\r\nIWezYqlKeLsV05RtOJxisHpiqdQy/W3s1uI=\r\n=6bn4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.0.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.0.5 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.0.1","baselineRange":"2.0.0-internal.3.0.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.0.5_1679701597238_0.898228358695851","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.2.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.2.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.2.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fcdbb62c1c6fd58365b35ef17b71d6f5f4d4a76c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.2.3.tgz","fileCount":35,"integrity":"sha512-Ihe5ehS7pZY4dNkvPA1e4ybbiIFSpmvn6NB0XzGUyTkn+b+G9ZqZX6gg/GQ1RZDJAlpeLNcjQ/hNiybAgQ+ybQ==","signatures":[{"sig":"MEUCIFMfJG96yx5OPrJ68Z8t13ijmuZf+EDHVUECyoWy8LzJAiEAter/IEKX/Ry4c52TpbeGz8I5onVv8QnBcxzG2HZqeMc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIeW/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqDyA/+ND43aRdcSq554+KtzA2DjSv9WPDteqFrj0OJ2R+LUu0+wvug\r\nZdGqu93EIwYMAYkjsfVmXHzZU49DPCltOcJPfetJiUSAQoGajXruFGKg8Jen\r\n+G6IaoDT+M+0DQs/ALoNg2mIzD9lIJY/53A/y3XdZlFHDviyyOoCgLuxsUW7\r\nZVg8IAWtW/Jc+JOJvvDwvrnqM5HugYKfuozjOypqz90JuRJOXZQga/UJTI+j\r\nJ0Yf4dtTk6GUyeu2qMTfe1kK31LsqlAOgpJs7BhRkvOKGUYHsYd+X1cnMR+5\r\nsFphxdG8kj5O+hzUGOclccOqvwKaSEPRYnadLDmAibW0REc5t8zEE3RbuH4T\r\nA+MubTmUuQ/+pFHPEh/gX09XFmyrsrcd8jE2nCKDBfZVbczEIsZk7cXaA0gH\r\ng+A4IYjLyPQ01K8Eyoq7xFT+aj9jnuQU0WKo3L9r9DbIr+LLlwJ+sm6rkTKI\r\n0k9O+RubMOmoeDZckgRRi46vrR5fufpNxj9/pYiXDh74qdUqlkZ9fTYCIOt1\r\nAOVbuc4JqrtcI0Ue0Yzm351RVYKJ+FR4frlGPWvUrsL2Qh2u2IwZQbQ4ZHeT\r\nbmWJNvjkupZgj0ugQwuEYaBOWX2c1s/mPT6LpYSGhSs92jfRIbra7LtjmTMI\r\np/9vs8mUnPPyxBjv7eXzsGjD6oR3Z1nqjSk=\r\n=Ol47\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.2.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.2.3 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.2.0","baselineRange":">=2.0.0-internal.3.1.0 <2.0.0-internal.3.2.0","baselineVersion":"2.0.0-internal.3.1.0","previousVersionStyle":"~previousMinor"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.10.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.10.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.2.3_1679943103176_0.8126656973521387","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.3.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.3.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.3.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"97941db949c8411c5c6ceddf62df22d039b7008f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.3.3.tgz","fileCount":35,"integrity":"sha512-RAgMTuC1YjaBXzKc8MmUlwjkPjzxc3fTUkoLdK4Oz+vexBy6ch7g5Q+39xm0PUldFpO540BUA3zgyjAEW68fBA==","signatures":[{"sig":"MEYCIQDiAlG29Cfo19iJVNHuRBKBHFOC7cNm/ma6I111U3GPuAIhAKvx0PUVy2nIBEJA76ZvnXdDBdoR+sOhCN08tAKlbl45","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIeknACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp8bRAAhGTNFFg44TVO9HpO54jDLNNTb66roDDUuhspypgwswRlADpp\r\n+haN+zZBlkYDnu11Eqhi6k0rMC4E/s6FQyny5vRZTdsfGE6YPtyBwsuK+9vG\r\nGARWqyKHgDqM9eJ/d5f5LFj3YcnpvKVYjUjlMW8Sb2iBYjoMEioqnI7/Ox3c\r\nuHRg/DZyPx59rv+9OUTnajSu2FSplgwoRXDDa7SApgQ903ZAqHs4QJBESBed\r\nyvSIclw61ZtyUoa/ZN8ua3sGSsHkElNybRRPGma33wJAGlMqCB40Hoz0RKTH\r\n/s7rwvQhDymFiFkYUzhnR05Zc31WklJqH6hSRwcBGNvH87HVSfhuzBVgmycP\r\nPt9UHWrHvU2VrkQbRXV2MhAxcn7O3kMVWTEhBK+NZSlWr+bQlawI1Am/oH3V\r\nNFNaicL3lAkOWKIiDWJ5g4zZ1ayb6Q0R0C8hWB/gQX0GbTXW9o3QOPzI4Y13\r\nzsf6hbdOeMB8vzApVlVdLtexoBzQbSrKN5oKxT/Db1tgFfz7SMlWXy6CH7R9\r\ndyDpTH15WzRYjgXD8RFWTfzln71vK9R6mYU9njRR2hX2310ZqYsxCWRJ5B6e\r\nu1P/1LCPkaw4eSP2utGzvW3Q/JHHm8m76X7KTszEAx/9TvTOjTViZKqftxwd\r\nvPq+ULZfFq8qVrTcc76kXsKQAfgh8nru1zA=\r\n=nuKT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.3.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.3.3 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.12.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.12.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.3.3_1679943975633_0.5426133262640616","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.4.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.4.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.4.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5b822265f74c77d70aeba3336220aeec01bf677f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.4.2.tgz","fileCount":35,"integrity":"sha512-h2kBRQaenF5zyxKZ6wGQNa2cVlOpWF+inOhzMogY7ievtFev1nBPB+lTu/vNn8uTJJIrvFXspbEc4Pw+/KlzRA==","signatures":[{"sig":"MEUCIEV06zwDiU3zWvj+JulAJEyuVS/R9eXq3GmbgJsD/SVFAiEAjPs0bQY6Z5AQoEjgf4j9pFGb6zTFuxSv43EaX78UEws=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIenZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoBUBAAgJqGa12Qk4G4T0WT6PbBg+KPywhzADl2ntbUr7ps9CEqBZ9m\r\nOq8r0ac3ujqvWKvctQvTrmmmX62AOJglOOl3OC3esxqMkZyh7uAGVCKcvkJg\r\nUF9CFFQgNh5jU32yj2tIsw4szRtDCLHZUtamhzfTWJphoxD5dw4ls5JMSofB\r\nGjt2wy5q/PuD+UjqvohgXXELbIfDvvGswDrarpqVrD9UeT4S/7DKaJYZVEXH\r\nx0YG5DwsDR0/DQKq8xI5Bcpl8+jIzxxYHXGC92p/EPjEH8w092RmMVYPo3Bv\r\nU94+qP6ie3xNRbYXHawmb5FFuXOnxNy/EXqwGU2sliD5DyixVePbepnzTDAv\r\n5Acphut6HoRwcFbzhk2XfG4rYBMTtzPyT6KULMs6XsiwiEI25tfjfhx/rnTY\r\nAL2w8OEfWFsciKGg6MxI+xQyPedV0t2S0mUx2NNy+wz8yd+iVpWRklpJ0YKd\r\n4rEWhjJ5pB+f0iKEpQPAkAKomH1hRYIMcte2fT+mkXnKmOM2qyiEJM119yXE\r\n6x9uAsFAx+UAt1Fr/6q5vkq7fZB3OV6TuuGDmTL+GBJAThERJwqDNmShAJ4C\r\nL4Q1psCCj8DLAnWIndRonz+OwhMoIWr2PdDMoNufIR/d5xKsz9l2JBG4c1TN\r\nJQvj3ejWJ6aSCqVspg5w7ZVpgvb+FBNXilM=\r\n=dtmY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.4.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.3.4.2.tgz","_integrity":"sha512-h2kBRQaenF5zyxKZ6wGQNa2cVlOpWF+inOhzMogY7ievtFev1nBPB+lTu/vNn8uTJJIrvFXspbEc4Pw+/KlzRA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.3","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.19.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.4.2 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.4.2_1679944153451_0.4475659045575169","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.0.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.0.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.0.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b5ff5816a61574692ca7b3688755bcaffc173dac","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.0.1.tgz","fileCount":35,"integrity":"sha512-u8tWvJKNwSeQSmc+Ay90BcRDrjExwFmFQ7XouEGtWZ6A8fF64fzu1Z+KqjElEynBXy6WDiauBGAinZy/n/3C1A==","signatures":[{"sig":"MEUCIC3deXYbfCHkZUAuDN6VfI0MZ4yCUc0A4UDGsWWwMGHHAiEAxC2J6jZp8JXKl8hk5T778lcXxVCyX1EwjLkMsf8Qp+Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIgrAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpAVQ//cwJHQ6Eagrh7N9z6A0fW2M3G3dal9cU6sxdjbvSvb6DedDkh\r\nZ8B68s+sLkxL/0/qeWh8AnEj7q1S9wki+06IVkWDAK0JjzyBItKQYpPSV7Ms\r\nwAuSLE3xnnZgl4Z0/+0jOwmYtZmTQn0TQXXWGjyw5rsaz8jN441R59PFlXt5\r\nXdQ31ZJGS5UmWVrKkxlFNCsvQjycXfST+2Sf6YcbZcunz/yNJJiVtgAeCCst\r\nsKe+Jnq04/IFx6dtSUGxyTo4a08yB4SnJfqUP4q9JqQYUIXEquJvszzg1D2+\r\nI8qNa7oZ7XdwUKu7+4AzaSQAumjw7/zSlMI5YRa1rKRpAocDWbLtQ1bMu8Qm\r\naP9sdDCVn73G38i/GJV8txIu/VzPU0wjEFj3mtqSed+Yc5f64mwYfgWiWUp7\r\nXPq9mTryoz0J2d9rKf1MiVQZoBczvDG7xHlwK/mFvcNB7ZDlIElim2LxeH5W\r\nE9wFwrNHLbZTROroNtpE3AQMD7DUcsDvVZ5d7PFX8graWD5wGPV0S602iwIg\r\nqXqwFqX1LNbRcy2A/2klXScT7qxxKNt+6hOgyoM95b/edJCj9aIY8FMgQT3L\r\nSopc/Fx71YA/FKRrNNqHf7WnavGz96dwXaQIXylNIMZkr3jYJbwIjcK5NJnt\r\nI+zusm+Nku1JmIO3gNrEKOJaemcDDSi07nY=\r\n=HPhc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.0.1.tgz","_integrity":"sha512-u8tWvJKNwSeQSmc+Ay90BcRDrjExwFmFQ7XouEGtWZ6A8fF64fzu1Z+KqjElEynBXy6WDiauBGAinZy/n/3C1A==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.3","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.19.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.0.1 <2.0.0-internal.5.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.0.1_1679952576684_0.4841378931715872","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.1.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.1.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.1.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5a884f635fed8712949d44d5216bdf315cb2f5a5","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.1.1.tgz","fileCount":35,"integrity":"sha512-72/clF+NZFtzt9rKCA6kHWt9M3D1mWmNaXKpJ5hz9Ipi6XK2mDzryyzAMCa5vl3bBcXSYsD7v5tspp16GbnUxA==","signatures":[{"sig":"MEQCIC772/ezG4dpjwnRWNy+bj6/gpOimLRNdtVvDO+QPPcUAiBZbutcw278gJ0qA5pS4h00syLHqacGwgIPiyLlIf6eAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkI5c7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDOBAAnmD429qS7Ig7YHRL3zAzzV3IWWaqSvQRBGiw1F/lGhLVCIq5\r\nPwWMqOQMafxN2F/xxDraUBo3sUQKWugN4S1qyHMh4+Zn01HDgeb8UMKxsbiE\r\nmItnAH17o7Qpy/exwMGRy2PuI8alFNeu5wOliJwS0ZtVUqltPHjvyn3vRuKU\r\nBAs1PfFfYoDBm8IrYRqTeJ6heMF139JzNwbPiLXrHfdw7KjT9jFzxwmwGxeL\r\njbxXaolGwr5BaQB4Mnli81W5m0kwPHDCMa7fblBnY4TfADTt33rO0hx0KgTA\r\nRIn3Yl94OMdSAE/F2H4RiUhN9+w549/gG/qeYRfpycEhpVSNtMCo3mPVH438\r\nLvSCo0FhgxXzWeHbBID86vcj64SjF+7Q2c0q5mD7OofrP9+JRp0fboOI5X3n\r\nz+kfU8rEg8I/+HdjNEGNaEVo9lylMV/Z0rKE/Ye9jN+kP2GhJ0kxJNLjhMbP\r\n5GoZH/RC6xNIiR90TRyuYvY6g0zc0w8cWJk6ONjuE0pT4J6X1p84KbXpSvbL\r\nrQ5LheMUqxGbgI2ZDf3aL5QaJYBrExWS8nDCrsKoWJkXkcMfHS9H3MU4cv9Y\r\nHU5KDlH6RljvLTjFg30hMMfb0yN3GusbcaOqNT6SL4FVjsw5iBH6jIvMEFME\r\n6WHVsiyv07/A+fm+MV3zJoYfjxbKGZ0hGic=\r\n=J+o5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","deprecated":"This version is deprecated. Please use the latest minor for 2.0.0.internal.3.x","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.1.1 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.1.1","baselineRange":">=2.0.0-internal.3.0.0 <2.0.0-internal.3.1.0","baselineVersion":"2.0.0-internal.3.0.1","previousVersionStyle":"~previousMinor"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.9.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.9.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.1.1_1680054075519_0.9639970067174386","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.0.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.0.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.0.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"c65bd3a4b23863f5a0c54b7cb8067290fe227db4","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.0.2.tgz","fileCount":35,"integrity":"sha512-fUmrrwsJ1MWCE+/H86EkcuZP5ZlTEsvfum49ucVLyzHtxNETe6iCfH7F3YM/akwc88Ilo3zKXU8RKFBfZUjtZA==","signatures":[{"sig":"MEYCIQDsfR9JCsCYm30/4z3ngMmhK7XL0lDp3SQDP45oLzX0ZAIhANKadvdmFpqW8q8YWbXtiO6zX5ZYE1ijoptqaJSxEi3c","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJ4IBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpeShAAhwedIPO2Wep1zyKVoSOC6VSxQ5A2xbWJkQcjxcXjIrDgNeQz\r\nKpJ9AT8A+aiUvxZmH929W9ubXVPCCtIShdT88V1UgLQe+fr6eTW9ZPzaMryE\r\njjqvB/q4iYIm7l817/IV7iNMPLItRCZkLqstjZOohuIN2c5kG4tY0A2O7Y6n\r\n2Fo76+GzfZacOgyCR9GciPlFcpWuanKZEXMj+HIEcmsg2lmldD/CMpxL6iMc\r\nqUG6wLgAoIDdYfMSB3jufitLFxIfjBioAmLKQ2PbtChUHvWC9C3jWBhHOKA+\r\n8HSxJfIllFAd/pYERcODv949PpWvTj3CB+GzkK3awAKjU7svAWFVfLAQsFCA\r\n6xGiUdTcls7mNJPmTJVJ33HZFoMhFyYS+d1DMAtjJkZJVJwWj3S8V854KueN\r\nv/ydL1LcZ+BlEv8t+1k1kdSRAzNTZjxXBoTmTedVaVGWnX3JQuX2uU4P3vta\r\nToExqqw3DSSksLh1WSsNhl4Ds2LUm50W+EYTgo0jpkADKAI97RDbZJUgXxy/\r\np2rBMVtL4oVBT0j9m9ymp+LxFDvfEh04K7R3yZeY+3ChCtYSN1InSsle7VND\r\nV/Dt9hBYw7mRRHD3mwmlshD72Jn3VPoGxc+Muf2JdlbrIdBwpWE3raKrJjON\r\nZU7IXGZkeIHIICteIJ2x4NcEXe2zomu9BK8=\r\n=9SYY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.0.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.0.2.tgz","_integrity":"sha512-fUmrrwsJ1MWCE+/H86EkcuZP5ZlTEsvfum49ucVLyzHtxNETe6iCfH7F3YM/akwc88Ilo3zKXU8RKFBfZUjtZA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.0.2 <2.0.0-internal.5.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.0.2_1680310785708_0.9227192041145595","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.0.6":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.0.6","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.0.6","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"70d51879ca20cf9a874cfe7e6f4f9363715b9c7e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.0.6.tgz","fileCount":35,"integrity":"sha512-seHQ6xf1v6zC21wOqAlFs3G1E5Bf+JU+Rf23T3c4e7Vjsdcb5T6+0r54GtfQy2oidtzatkj9aS+l3QSU348r0g==","signatures":[{"sig":"MEUCIHvNIJ9aDrsJ4ogmNe9NJbzp3Ax6L9X4B14fIParEDUOAiEAhErK51nGJdc02MmiV0ClzFT37saV3uzLkvIDVcv+wU4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJ4vrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmorDxAAojxq4g4Nn8P36cYh1hkbY2zCG2GKKcVt/k5BtEOjhnu4DOdh\r\nkrGIdqoYlQ7eHc+NVxh+ZLDnHzL69JgzZ5W6a2OWejfHWifyBELgGqF34cnO\r\n5CCUogPmW8HZ5Ul+rMf8hkTvzsBz7A9+uip0A24zSFkEv6PzkPuMfEym5Bpu\r\nFD9svnLfbjyCs4+xjhFWy0g1iqhP+NACOcHcUAES8p6uzpFm05apBN3uzsZl\r\nIB9E5w2seDeVlTg/paic+wOgZB8gyocHIHij4IEaokqe8kZFkCvaHI6WUvIU\r\nzTnAzqTOPlb9xuqe7+PBe41T4qFNttlsIlzQMqXZJUekldvE25q1KQdbwPgD\r\nb7mexPyGc1gvrXuyIkQ+LsKBbN1jAIFc6ICLRc8dEpP8FDwWeC/ZxPY8rm9E\r\n2HyUeiTYwBFsa66CIQWQoFmuxbvJgW+xr79EcpOOHYmbyfoYat7pVcWjQXd0\r\nCnIxySd9rC3V19hQtXcjnWUzw8QMmc/SC3Rx+OuVsDhPVJkhEDGkAk4WgD56\r\nZc9s0+KZ5jEEBmVmvgVu+yi18Y6vSfld+zSe/sstQDEZxWPpzfVaHXvukI69\r\nJ2Zi9lg4NXqo8cRDEphCywG+TGE4yDghT43GqyEUry6Qdy0mSacNwngi0J1V\r\nXbptr3JjFYLnkVCDki1coqq09vn8KqgAlwc=\r\n=pXST\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.0.6.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.0.6 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{},"version":"2.0.0-internal.3.0.1","baselineRange":"2.0.0-internal.3.0.0","previousVersionStyle":"previousPatch"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^6.2.0","@fluid-tools/build-cli":"^0.8.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.8.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.0.6_1680313323299_0.44205912862274555","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.4.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.4.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.4.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"d254a6785afc9e7fa1bab95233383ecf4058589c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.4.3.tgz","fileCount":35,"integrity":"sha512-mLXJGSLPKrVwUR6JRoRvvtmT9xREcrsENn1YSOVA9Mdb+dflxfEFsp+uboc8TyTC20vGkdQdkG7lQrIbyVVW8g==","signatures":[{"sig":"MEYCIQDhfdI89X5ahc7WVsCZHjDNv96Lu6Us4IyH3XZ34ofjAAIhAN0+E3AxrgvHtLZYrANzIADlgbh6rmgDLyyc8Q/CLsgk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJ57FACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo+yhAAjpBNgux5fOdkrVcmJ7jV9AAz6mbASQAuDfUUPwDwHuMxxErQ\r\nqmVbdvZufxoY44w6FuPzgpQWkjKXx/9ImEJmDbntGuhcnqmU1jtNGDyBLL9y\r\ntBwH/2rirdkDADNYPRvhmlkxpwTnn+Gm2xo0EbVF75Lw6BaeFToj8oG2U0mI\r\nKfdjqrCYVOzVOaax9FD8kyZwgsSZqmJ+obkmlrpW0Iqr0+T1fvanEULyuqgv\r\nEhrf0n8uhgeRwugRuNb4n1Cl2F4iSHgkKbBzSif6amqVF9DNllJci/SRFGkO\r\ntcUfPWkTz188FYL4D42IUC2SzH1Ru/8QE/01E7awJdDtpLxHv75PNCdDik4e\r\nuaJx+KAFNXZnA10xcnjsyRCTRDXkeRsghxmz5eCY7dsfqB1LZAtuNGJpbpDV\r\nvWIDqgfxUnmFcEN/CHnC/zvpW6YMwm4CVxnCPsavpfW4WsGAiSqm3B9N6aJb\r\nGbQ6ng0kegSA//yA2ykmAHEdDncTnOUPKGZT7Qt5uPvlEFx8JvGnpp8KTZQZ\r\nFnH1/Ry7RvIvThKRxHfYFLhppnc1N8hvW0asZf+aT9hpBK0YxFWaph02SmV+\r\ngHUS6OXIKxI+Xa0+ItfHsobXWBIV9xUgEW8vBSqsGZcKz4iznHRQwdGFG9YQ\r\nApmAbx4MwAs0ticF/iqNJJUSKvhZRBfsytg=\r\n=31dD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.4.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.3.4.3.tgz","_integrity":"sha512-mLXJGSLPKrVwUR6JRoRvvtmT9xREcrsENn1YSOVA9Mdb+dflxfEFsp+uboc8TyTC20vGkdQdkG7lQrIbyVVW8g==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.4.3 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.4.3_1680318149655_0.4871567138648982","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.4.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.4.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.4.4","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"25b725fc9eceb0cbcdd4a84aece8fb77778dedb8","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.4.4.tgz","fileCount":35,"integrity":"sha512-JJBSuc5M/u+EdWPXjYXOKiG27yx9J9JtuyAVOo12xQ5yYz4r1fymAJvu8DSdFVfIgSIWYiPXTKCCpiA6y1zRTw==","signatures":[{"sig":"MEQCIEuIJr+UcqvsKYdQblXzxx+0ULG9pGuaymUg3xyToBDnAiAiyRrvoxEfoQ5/XMyeKSXnqw3gcWOhjYg24E22ILbK8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLIz/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoSbxAAjnBOH1fBdkDzAGNe9V81dyFtV/nhkbO19rxp7Fj46/Fx7kCS\r\nGFDM3kLNi5LNe+KqvEqGU7g0W+ya9RWEgXqv0EBMB7vr7aSvaqW9cVVQsmKL\r\noYYADBczqmsHR2ddnOOXZbaWEKdSlfbKUq6hWPToCd8pkVZirQdyntZHOVtB\r\n1449uck/zt6hK9N45XPH/nUol7jrAwk/AXu48WKouMxd4pchCMv85hvELQkV\r\n8j16oB5vXFoNZIbPfLFCIyO9OT/7zGgQHi4RwoFSLr59naF7JJM7VqZ4rrKf\r\nVLTuOPE1gUb3i0LBJZOC/tbVCXzQYjWdRjyY6V5JMucPsx6GqU9MiYZSKEoO\r\ne7b955k+1lHQRElen0k9B9NqJ98VqhA2Wlbtn5J2RQwRW5NKJqZCE/ioFtNZ\r\nuUqYiBbO4PoupR945SJw2b1CMHanrRzgzBYWwDMVQnmdCPIuK/B1yMTGL9Ly\r\n4T7gyKrEXL6zMREOLWxPDJwq3mUzMRNJx0uBzOU9KuDtze5tfwQSaHBJij6w\r\ndqR8pT0ETKPz5q/Z8HYJcwcNVcm0h3ufK3EVqEKhlfoBRd2CmZ/ruYbtqj+h\r\n2YBD8gNDwX1nnzyyPDz7LWXZbQGLi+LkX+5L9D1Qxr/sLE0cE+s0PAeDqTYE\r\nPk+M/6hXiSCejGpMOCo8kzfe1O53CzkRBiY=\r\n=xUkn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.4.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.3.4.4.tgz","_integrity":"sha512-JJBSuc5M/u+EdWPXjYXOKiG27yx9J9JtuyAVOo12xQ5yYz4r1fymAJvu8DSdFVfIgSIWYiPXTKCCpiA6y1zRTw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.4.4 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.4.4_1680641279101_0.5422290191649226","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.0.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.0.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.0.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"08a7301a503715a03b9a6dbd5e165f541ce8ca01","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.0.3.tgz","fileCount":35,"integrity":"sha512-dK0JAEswUxLwVjoumkIbGPFRMeaHhCL3VUrbYQWbemzSndj/1rwNFFemWA/wxQGDf3q2TtidHL6hDsxo5E9LQw==","signatures":[{"sig":"MEQCIFSP521pQoMbF0IDfucKMnV/RMq6o6iBd6WHlSGC6ELvAiBKSzzorPxza/uA2Goy/ynE9TjhsGCubpiZkrSeeTvzKQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLKjmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQQw//QAsmmx2GzT2Lu4HFZz9gUfzO6Kv21kMcYkYBYdnMTulwpfz+\r\nIsLwjmXXmjQly8ITVmFefI0/VJWpeSqqKeCzj+54YBvwiUbrKJN++bN/MPjo\r\nVOBKKEFWEAsOe5/tQHgYMdn/DRPbZVUkgY4vl9Za4lH6E33uxvXgW/Tco2Jn\r\nzaBvWbIucN/OrECVLfLt9O6ZhpFwlLUJy/5iA4nAdXEWJbsvG0T11gOqe6GC\r\n69xJ5uzgrUQf8ZVFRdgdaMObQoR9UZpjeQ60OcrsyXIa+WJqbY3kdulMvpMf\r\nRleGiZjA18+kp6ha4HZu9K+VxTkl2QrgWgiIIUBgO4wBLt44efQKo+rKNcQg\r\nSWooQob04whyvayUvlJTZsLLKIyi7y3QTHflS94X0uFXmDMgksY+of2ffAV6\r\nUZaJ/FcmROdpu52HB/GmiRnaN4B/sEX3/FAFu4yjC6vDhX9ZpZlU3cSpgsDY\r\nB3URNu34FK1TNV2Fe76dA1Qwp0pHUX6wlMDktdhacjneBoCXW9GhOhD1ZWs2\r\noxxjHbtZ4t3r4uSjUnr/xo43ElWS4BB96JaFGHQqGiW9B+XCyziaEDK6kaNh\r\nLErJmgYZ4yhRli9DPUnjerxKrRZ8mCUoh18yfHlqMN2BsqR59yRDDshlaR5T\r\nAYiQTVnmefVrwvBg7n681T30tnExOzyo8Ys=\r\n=zAA0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.0.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.0.3.tgz","_integrity":"sha512-dK0JAEswUxLwVjoumkIbGPFRMeaHhCL3VUrbYQWbemzSndj/1rwNFFemWA/wxQGDf3q2TtidHL6hDsxo5E9LQw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.0.3 <2.0.0-internal.5.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.0.3_1680648421853_0.4650017365983148","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.1.0.148229":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.1.0.148229","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.1.0.148229","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"5a42599ae635d2fdf9a8027e7b748d557a662d3d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.1.0.148229.tgz","fileCount":35,"integrity":"sha512-tHmm5nlserllXFltVervXxGIX3WNi8yD9c7XhlZioAwgkKHKfw3Z9eD3i59J6exBW6bQ4bcY/1nAI18HSI2bSg==","signatures":[{"sig":"MEUCIQCSpJbe4WMvfX8T+jieVnEsd2EN7DxKVAd5dSFAXTpj0gIgLeshM5Vo+mJxO5pk5cwKUCI+2wlvsVAgxbjSMByXz7Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkL0fMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr4LQ//R+gsXHxF0bHVOrEvtJVwMkoOqHICmnHbcwJ5RZ06AD+UJ9Xa\r\nvuE0+mbBkwVZjXBQdihODTsqwVnt4RyLqv75OV8D4H8+PPVHglj8xzF/7c6+\r\nZSUu8bcQsn0bqsXYwNEi34sSa+IlbhCDDZkUugducv4CC/Lhr7+HrAQaXxfY\r\n+8/F+YMjLV4gllFJ2aLNtOB1lTFf6vR+uel/X+NcsNuK7PRrjYgDnQ5v5ZgL\r\nWEM89ChgUyoBeZ/1uemOHYn6g1O2ktSZwzGlLbiHKTyFGfbNtW8wrfNTFIKH\r\n94cPr+YXcs0xeTvGlHWgHPpcxuq81QS04o8+9FbUIeokUrOXkZfWvdTFkKp0\r\nljoJpPth2rmyo2siP+kI4TAHuWxShg4UgX57fHWWYtbPT1DC2rnIKOzRewWG\r\nVRys2tzmUxRudbrM79sjRI+rCpfUOoS40S0vSfYoW5nPflnY5uD8oZTWBgpo\r\nTz4iNrPnWF3cscaqT0uhRyimiRlvcszGETUsQGoiStEvB4Jm1WSdCUQEZaVl\r\nYyGe5rktStIHYVLwB1cYeLo/s/ug38wCeROwVQwwy43GjzYXNXecC7IVqJam\r\ndg5zIQIE3Zz240YJfFTDYyHSP/Y+iG2nultiHP6klhZkHFB3xeWw7EwegNOL\r\nnA4OB20EZb4d1XmKlELJOsB2dUk2C3YtIjg=\r\n=wrgB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.1.0.148229.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.1.0.148229.tgz","_integrity":"sha512-tHmm5nlserllXFltVervXxGIX3WNi8yD9c7XhlZioAwgkKHKfw3Z9eD3i59J6exBW6bQ4bcY/1nAI18HSI2bSg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.1.0.148229","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.1","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.1","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.1.0.148229_1680820171953_0.4348868876776051","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.0.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.0.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.0.4","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8ab39fde5dd3b5c6d4533ec9a105dc7f05d350f7","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.0.4.tgz","fileCount":35,"integrity":"sha512-pC8dRMgOGVdHCMsMlBxUXz7ukiCwHWBTb9I59ozyhb+O8Oc1KFkpnopYz9GheGFEoH53431nf0JmXcgB3ZIpWg==","signatures":[{"sig":"MEYCIQDLE2K2oc5TAlfmvcgC2lETNr7qV2URoeYVyHOm7pVw7wIhALnhvlQ4azvDLtDH4KG3UqUTLi8wgatmXzwghQ3uNNTp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMFGjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoOUw//bq8mAURUXpM4XnvVzVlE679qLpXtRRWb9Bx7pt2HYAZXKrmK\r\n+bmdsHzeENHn/1ojFlzniYUnCtN+mcNjq6mW80iGfs1bBzTiDW1nCH37LxCW\r\nerOmi/XMotLpDE+K9msGE0m3lSqN0H4xyUlrILS8OUeR+lqdPuYYdgEKIEe/\r\nfcTegjKK25M1kLqW8T0OuABykXcQSfTpqftk5YbgVCk4qSyrOIR/G7qCDvzx\r\n7SZmJU3weOAWdlnhInZRIlnI4KQ8DBc3C+t94Ud4XjI3pIpN2t6DMQJTCx5e\r\ndh24cNXx9M+0OPnXajigmqxBDi7hH2m3JmV3SEyR3ubeIXFbleTdmZStdjEf\r\n4U0/ru2FKa60eaj3Ue0l+W3nGQ5wfuDIyBTbqu8agGdAx8IIIR0U8QbsZYg3\r\nCHa869O6Ve/0ckQ6iHp7s5T0K4q4z1z1UjrgrLURKwIOm8vq0utB0R0fAs+Y\r\nJ3o2/QCzjHRJprUA+wlbnjLDkmaHSI3h6Dpb5/fBIhENB6s5jGGTKqdavU4s\r\nj+9FqbJzGuCFfh5leJTnLwOiN+hENv+GOiUBS+GmFXKKDcinlHxYUDBVP5aM\r\nsPwK+TOsHo7GRMjOW7XK2neJpgSSOXYbG8ZPugZzbRqIiE5oGcc1DaFCUP74\r\nwm9yI3GlcKeJ0Bs+TgwYIQ+WRe8fvXd6LNM=\r\n=4nml\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.0.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.0.4.tgz","_integrity":"sha512-pC8dRMgOGVdHCMsMlBxUXz7ukiCwHWBTb9I59ozyhb+O8Oc1KFkpnopYz9GheGFEoH53431nf0JmXcgB3ZIpWg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.0.4 <2.0.0-internal.5.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.0.4_1680888227099_0.6387481645474882","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.0.5":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.0.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.0.5","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0b69cccf11e531fe727c4b259c367f460268e543","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.0.5.tgz","fileCount":35,"integrity":"sha512-dMgeG0UkC+GK7Pdy1c0gKtx/xEtBPhChvEpycWvZrbmhJ/LTkPKR5cJYVbuEmwlX/v4pjcItaR8hcZyUYyeLNA==","signatures":[{"sig":"MEUCIQDNMkrbN2UVGoV0HSSF+rOoDUFJbVjRigkfy2z43CeCbAIgFk7s14hkjxF1qjQncTT1dKysK2wRUkV0srtl2165OjA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMJCvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmotRQ//XC/V7ouMtB/cnPEi3ouUuR6FLipRB/EiF3/QmwJ2nFkdhr0Z\r\nMR8zOwDav1F0aAwnwov7iOUvQO9wbCgNeWtGD3UnUHuFiHa67ZgHNKa3Fku1\r\nxrdopqQeleFNgQvYR44FLc4y+h66I++lZnooakuj5mRkWMEmVDrOa/bDi3E5\r\nuk19iStOZV+RgpFKSmUcva3Oaqei5AtoM21ClB9D7o6ypggZiqkEBXoDJKss\r\nD7oH3loDWD3bXMem6F3EgkmUvZevONrh0lflsUU6xMMz+cH9ju06B7Cm9egL\r\nJMtLqUPqMZSN8MvH3XfT22uks+qYsrLV6Gody+GTqTCh9clUToF9Ak4fM/G9\r\nIvMYlrQdH+jpzu83pXPz6whfkCPDpxF0F7Bs0oShq8eCfq+1U9yJ18mlov2R\r\nh9U5J7ql46VDNyojqHCsgOjnrBNBX2C4MSs4JVse6c2iv/cuper8+9IWqYtE\r\nJXFLFlA7N11p2I+vI9tqazDBLfncT4efTYosewoAXOrdiOmG2wXegTqeRXkX\r\n+21SUYjLsPWCEnHyLeDepBGWMEqnpxnhUXxCmU4+yqaFj/JgToOAZXuae/zI\r\nIdOmo6bkUjefHFtBWrInoyRQcQtqvmD6gw9LjglMYFk5i8V8zrs8VDxcGK0b\r\n06hJl0XFyH/Uy531UooNHYH1w4sYxOaiFa4=\r\n=RnK9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.0.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.0.5.tgz","_integrity":"sha512-dMgeG0UkC+GK7Pdy1c0gKtx/xEtBPhChvEpycWvZrbmhJ/LTkPKR5cJYVbuEmwlX/v4pjcItaR8hcZyUYyeLNA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.0.5 <2.0.0-internal.5.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.0.5_1680904367768_0.7574427655688896","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.0.6":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.0.6","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.0.6","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"7fb7ad76a1a48b22954d675e89ae3f2f54dbc4fb","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.0.6.tgz","fileCount":35,"integrity":"sha512-1E27QHhyKpvldFRazBvYjYC6bovYMiL59qremWCZmt0q/4JKNSdTpFFz1eR+UfubXdhcBPJjSY+ITGrFlplMXA==","signatures":[{"sig":"MEQCIBG60VLV3r4VlN91Y0vNagnePxXDpzQNBpum/QC2+4fAAiB9Zg1OFZ/iq6V3gHcF8LL23l5162NjWHCS3MWT2iDHWA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQfGWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsAw/8DkTy4c4h89D9Vk0ZRiQ+sQakUiZNIEp+JyAetWqxAn3xwVpR\r\ni9EtrVHpeMrFOb2ie9Rw8xJz2xqykKB7uyEYyQtGLassHgVSwI/NNDTSAbDI\r\nWbRMygUjWBs70vCyJd1NfOJ1bpC/T+L5IwiskcGqfcd0xOZo0D7d+aIkL3V/\r\nPe0uPM2vz+JQXTZhuZwYNdkZxYBz8V/sOD9dUw/1rLHW1/KPK1CVKnvvOHJl\r\n7mEgGhFOuKA60louwcwY/0DIMuZJCmv9xJlu3nN3sBO4xHCDjLqGZBr9oia0\r\nBkJSDxVi+qGHEDm356Fr6YcVjY817ENqoXrQkGrKNNRJ1UFQ6oVabeMtQliX\r\n47bFXYmht3piJAh0fORjk4E0kVX4GZ4EeQ58wm1nNKX7GfkyY2x9R2XUgIVU\r\nrSotSI5UTqpyT2eK8D9o6H+rRVBiy1nUDqlNBDK+srdBEw4nBNu2jlN36ILy\r\nbUY05c0SdS19hq3dsWsP0r6aGfb5Sgb+sadSqmNf1ubPqsQGqLeXVqdf7Nbv\r\nylCChEjpJYEOYUPai7QV1aGkGogSZtPDxqSq4D+ll5dJ0ywafPW32Fo6zy08\r\nfcoUzvmPViyfv2BQ4GebXag1mY3v9bpCKqh8XSh4qxWYgwJ2l5Dy2MZiAB6F\r\njJzWvJ+HigpeBM40gMvumdlhFEOeQXidu78=\r\n=RaqR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.0.6.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.0.6.tgz","_integrity":"sha512-1E27QHhyKpvldFRazBvYjYC6bovYMiL59qremWCZmt0q/4JKNSdTpFFz1eR+UfubXdhcBPJjSY+ITGrFlplMXA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.0.6 <2.0.0-internal.5.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.0.6_1682043286560_0.6243081541525453","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.1.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.1.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.1.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"c0e001652ebe2f3fde96afe74053b7b0db6d186f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.1.0.tgz","fileCount":36,"integrity":"sha512-dPIxDLKpZXGpElPT0p1ryzlCLEwAjZ5WOWbp4JJX9mCrAD9IeILWA0hHvo8+2Hd7xr/4AQNzCEF4mJ1h+mpTDA==","signatures":[{"sig":"MEUCIBVHH9pYczb4Yf69JvI4W4TIze7AbeUhZklQ9eBy5PxuAiEApV6KiIXvNsX7G0wIc0W8nuoOBbX+bf4z0vkJvcHdDY0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQyp9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxCw//cg2ZHl+u032DvyDWGe5zpnCmQM7SLi3qFK6wxOLoLYYyG5fy\r\nfChOcllb2mARfuKCWUJq9EiVLAUJ0XGeCi29tpbP4AyFzIZ/mMBo71hPuh7s\r\nakXxldtuSbMcd5jQSSTMl9UnOSXD1RSk2/Mhy9o1MrEiuPd5i2dvv7K9Q6N6\r\nCIvPIoMZAwcni02q3amkzAdCS5KHL/Hq9dtG7Mvs/z7bF4CIIQBf696CHXeK\r\nwZjoLX031Fkun0ADsqTmCBbhPFlARsNKbA05DYQT7XpOiVnmxN3KOb1IP6fg\r\nXwqCVPTf7iaONMhmTi7V5mRCX3Rk/H2zvW30GQjXsvAnazOiLXDaPX9z/9+7\r\nY3I/WqcIfOhHzcwtR7tWxJbKwLKk0rokbAt68ZGOCEznrFMB5BF21m1JDfbx\r\ni6+wDTKJrfnsjo0hEFz2O2cp/Z+76bEoTP5CnZmx4rcWf3c1JszfKKSWqHli\r\nBXQkoaAxymJCnKCGEqAyNazVS5nksB6a9+uAr57rfRi9Fi+mgmGjxF1xuVIr\r\nHvCm8pBIb6TdMXqZ5+yObRO71R+8tNXxni3FXSUXRcRo0UJx4Yc91kYhgPt1\r\nJGTbqxP/ZK5QOusNcWk2x54AAKqCtnk0qUEUPNX3yEEL901KLulQXdkIE7XG\r\nuByn54mbCCLwtK1GW014CzmMKs1PhxPSdzQ=\r\n=IcSJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.1.0.tgz","_integrity":"sha512-dPIxDLKpZXGpElPT0p1ryzlCLEwAjZ5WOWbp4JJX9mCrAD9IeILWA0hHvo8+2Hd7xr/4AQNzCEF4mJ1h+mpTDA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.1.0 <2.0.0-internal.4.2.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.15.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.15.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.1.0_1682123389002_0.7543516777649779","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.2.0.153917":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.2.0.153917","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.2.0.153917","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a7d7bd1ad6fa91c1324d763393fafe9d6524ec20","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.2.0.153917.tgz","fileCount":36,"integrity":"sha512-74KOUKSOjW5dxFEuNSZk4TYlC+vAmPvEiDO+A9buKs8Ajsb1VVqOtEKktbgdUZD06qCOZCFhh9dXhnf6/xl7OA==","signatures":[{"sig":"MEYCIQCnDXrYhBvp2npCyIBlanR7PdEphF5zTs8pt9Y58LzX/QIhANeVqiHBOHrh3POmR05G7jrxfg7sw/8DfR6eYP1zD5Zx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSDEFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmofHQ/+MznSO0Tykf4XkQcVuXKXgAq1ydLME2b1nzPAzqjJSNSlgfAu\r\n3UweYha2IpBWDetlIBumqSscQ3hSmKqDw+pwpcKwWiSYMr1cAwz59eDl+aZ9\r\nWmhPyl5fnvZH4x/gBQ+2UxxalXseF47r22O3OeXOLcT+QvJiUM2ukujYn8s8\r\n5m1IzPB7GtPxLMnVAeQu28mq305C8wQQE06n+Rlo7JT2O1suFYZPNNZJtt5n\r\n7oZmV0Tpq+h1I2jiTirlW0ADFWFQul+6aq6UDf4FMTUF+wg+tN3OpUE1bQ8t\r\nqh2InC6qoHuzq9io6FOhyYwSkuxTJST92qUF7cirhw3+HtS7ebiOCZjJXmxr\r\nQi/7be2vkLIvtlwB8tg1FNZkxJh7fEjzlX4VAgbKNrpXzUa2v+/Zsr8OEMyD\r\ntYX7uDwJfdj3+etpPcMWYkysXno5E8bf8KJu79onGkAhvqS9DNKQk0KDsGfT\r\nRVOHwJZduZrb3NadwbsT90OCkoCtUCtR2aHZ8SoIPBDjU+dLtWeeu9KxYjh+\r\n4dWBjCUIZJcYRTfElxOVd+HEVEN6B5DjqTZcgcOOdqr2EJk8rwnZmNzV0eBP\r\nZ+Mkh7HN1b9fYviCcvn48KZk1qut9Kv77t6QJl1mS3DnrfHc2UXJkvstSqPD\r\nvr9yTN1aJsP6h2FhP8/9e7IpZLPqet38+WI=\r\n=3owW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.2.0.153917.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.2.0.153917.tgz","_integrity":"sha512-74KOUKSOjW5dxFEuNSZk4TYlC+vAmPvEiDO+A9buKs8Ajsb1VVqOtEKktbgdUZD06qCOZCFhh9dXhnf6/xl7OA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.2.0.153917","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.15.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.15.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.2.0.153917_1682452741188_0.16511735256175997","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.1.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.1.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.1.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8b3f148548673e968b58ec6d255690a9dcce99ce","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.1.1.tgz","fileCount":36,"integrity":"sha512-af2JFkr+5SGnLbiKvJWyjCuzBVKbQV+q5iSqNdZaUWVG+/s4yG3EVLjtakBTIpscNjjnhkIEscOEablMx5hNrw==","signatures":[{"sig":"MEUCIQC+5M+Z+vZAHMv9vwRbhKChGHjnd1dqbS1FgFNvcm9xywIgV21FEiYwYiATc2YeK035xI1ceDEP2s0eMOVZCNvdFAQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSrHuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo3SA//RQb+diQi5qKhW1Ey3BRVicL9k8M3l5Tag/30LRTPlIP9kOuD\r\nJLWIqcaJjBXRBnEFeqvAhkLW4WzJARewYMALHk9Do3JaJ5OFc7kSOEC0cTiL\r\nCdqO1klE0lkvZjlDTh6fpK5vDPkLMp5eoqJBo/oP9kkGCqwBVNNRkysaLn+E\r\nYEnGlPh8dfx3RdDewBTcGSkqSljz1sG0F7dAlVreo4GgIH1xwWFcCo00adwS\r\n4ziiDCBRN9B/6DGFWVZIUEh13BGIHShKsIRtWzU8LarlxA0rkxzRCanQssVZ\r\naihwcLI/qLDShdxfBHlh0isLSLeE7XCNHW+ijFW8TOAATL1kcGCsR6oXTV1r\r\nG4V2u8AXiVwZ6tXgVE8DCg6/2VAoPXAa9esyzpd2/dAeudIXKQX7MV5NdxtI\r\nTrjgLXsscT6I7aL5Jb6jKEh6nq3sEiW/83MpkuSHczs0aV5YY1j/Ra3uJ0CP\r\ndqWUk5qwJ9Lb2egjL8gM9CX7WNXWgo0Fke3QMRMm7iMa/97f0niwDcKqbwhU\r\n1UAejj5GvLtBnh7L2hfgzuO7QpGrv4+RbmcVUrArEWTE5VLBYjm3P1u/Ehqx\r\nIs//l0st7wElIWBijetNsJDniIW8nQz98K4DALUz8QAv9EYJeJudHCgN5w/X\r\nB4Uhl7PohDmhqfn5IJz4SBJyC9XIq/79X3s=\r\n=NKRM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.1.1.tgz","_integrity":"sha512-af2JFkr+5SGnLbiKvJWyjCuzBVKbQV+q5iSqNdZaUWVG+/s4yG3EVLjtakBTIpscNjjnhkIEscOEablMx5hNrw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.1.1 <2.0.0-internal.4.2.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.15.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.15.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.1.1_1682616814725_0.15079295816800942","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.1.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.1.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.1.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"sky.jokiel","email":"sky.jokiel@outlook.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1b23b3dfca18f09f82e1f98c883ee5ddbde6dd16","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.1.2.tgz","fileCount":36,"integrity":"sha512-5s0/SyJmsvvt1qZZa7l6dt0a+YJF7mvwZ7m7w+jk8CfVjgdHPEW40TvQ97M8Mu0O2CxOvM6E6Hw+yQMr8JsoBg==","signatures":[{"sig":"MEUCID8WrREQCH90r9LzjE8/NuTe1KaU7G1WN5ks4XGGww8WAiEAsW8CWi+4OL74m1mHkgHCo5NGHNt+YfyatLUbBE8dR8M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUAkpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo5KQ//Roa2Q5/0R1D52Ze839Y0E2U5rk+VUcnZ6OuoBAOybEjfynQX\r\nLOwGysk5q2LgNvqpgfTfbJX3uOFk61JLw/KkNpZ4gRze4VWAbfT5sTyBqx4n\r\nhojvPwfvyzL/OUc0ZHbOjoCAYF816Jl2By7mKMztJkhYYVyE2RGig50qQcie\r\nmcsxz9SPbrLN4fAAGoOz/h8US/SU+TxFaLmYlcSwROgqKWaMe2ELLivSGG72\r\nb9iIldfknSYfRLmiYI8WXoi5cTua7DRwYEr/08fBzdGvhk5Ezi57v5dR4h1S\r\nXivpx+soWo79fVNFcOKhRv+/cPCLYkENRTiip0FTCXnnZOx3kPyV6OyhK5Wi\r\nHO8W4e1PsiktDHaoADBXt3tcMF4CfXYR3dS9E+VM3tNNxWzA7g7/DI3KCCcw\r\nuO45gkvhWu3vMtwMgq1f+MQoHHlrT6I1Hst/lDAR3vmu7GPd23aPn49RuhD1\r\nVVrgm/aM8AgqrEvNvNTR/6Vys7cpW8eWlphU1UxTgcg9ItMEY0taWST77+kw\r\nYEKt6pXSmXoCIlbiZgsxndLFkOWaMeq85noXMpqVmzF+v3Uji8nKTyq2XrdL\r\nrHN2l7/rnAyaVgts00lL8uymcXP7adlqUTunbsqFGgR9a8utCG2gvvOkuC2X\r\nM0kNHh+NqbZQO8jnccswZ+x7JNpqp+erYQo=\r\n=sZAk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.1.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.1.2.tgz","_integrity":"sha512-5s0/SyJmsvvt1qZZa7l6dt0a+YJF7mvwZ7m7w+jk8CfVjgdHPEW40TvQ97M8Mu0O2CxOvM6E6Hw+yQMr8JsoBg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.1.2 <2.0.0-internal.4.2.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.15.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.15.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.1.2_1682966825620_0.8738254481525527","host":"s3://npm-registry-packages"}},"2.0.0-internal.3.4.5":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.3.4.5","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.3.4.5","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"dbe7b4db3a2e3515958f74e9aa6ddd20c02a24b7","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.3.4.5.tgz","fileCount":35,"integrity":"sha512-L09aL7EqCH/EgpSzLNx3hZWIaxCIYCRg8MK9GAdOw+ZUUqaaAcl6EoP9yyXrduTfMphpoAhaXPD6W0YOujwz8A==","signatures":[{"sig":"MEUCIEG+rYEBEBea/QG8yjrgrj52oOMkf2cgMT73WJaADBGCAiEA8KxK/7nkQevwtzraXOac9anXYvM/CC4NM5kYF/tSd1Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkVBPGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo1IQ/+InLGJnszevzK7zYEbZIrpDyPzkNHbuQggbjOqMZFD/E4Hpsv\r\neLZiF69F1vmEq6faNy5OlH8PNEOJZvbFAjMD6MfPtURrJ4RLCTK2QYp4sgam\r\nydoF4/Hce/lwJwqmz33NMySQpZTRdHYs5Wj8LUVraBpQa7pZEhkwAv4dI+qX\r\njtlburcxcA6YgZZUQn5vFXisxNn6Nmk859XDVUt3eZn0bNdvW2/ZzDDLjebC\r\nzdLJYKrXAooCDO9A/7JWHqGHpFOMDJKR0FC/U8KAoYhJWvsqVLqh6aRaVk5F\r\nk4XxLrOHfq9fARNPLhxvPZtFoahjSWf74N2/1kAoA1YjmxXf2qF3Fi392LLN\r\nMOn2Hv8syhLjrOxSKE/JPWqKivwG3cUCtokLVeW2uWAgipgsOPtcGIrdQtQU\r\nJ0Pfwh8fxmYcCC4d5RieGN/78oF/JdbcOnUSbf5t9LfL+P5+qGShZDuh9qlM\r\nWNsVMERQ133pyoplhEAzg2RcyPvzP4APvLfzS/DzF82598NaSIxIm+igxlDI\r\n+OeiHFhHaX69DwkcV3G5Y00URYDPaVd6H33UTXdShw3KpWumnBxTPYUoXZTM\r\nphreyQc1KiCrGpq8OJ3JybJ3Xo94NNUsjrkhxPu8QzZu3egU2UL5E2xvabKj\r\nDk2627x2tof/E6WBbCh8o1F029MFeNrXAtE=\r\n=/CMi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.3.4.5.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.3.4.5.tgz","_integrity":"sha512-L09aL7EqCH/EgpSzLNx3hZWIaxCIYCRg8MK9GAdOw+ZUUqaaAcl6EoP9yyXrduTfMphpoAhaXPD6W0YOujwz8A==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.3.4.5 <2.0.0-internal.4.0.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.13.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.13.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.3.4.5_1683231686425_0.39285585636551956","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.2.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.2.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.2.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a493b9b42be68f7b8bd3dcdb0032abc932922f91","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.2.0.tgz","fileCount":36,"integrity":"sha512-mRQMAYNCZDiQa4J3QV6Vav0KQOfILiLp0NXNSuONgwLbtw4GBjqfod1vDVT6DlpQtwVImPEAJoZ95nWgd5/YJg==","signatures":[{"sig":"MEUCIQC9R3TAZMvGP06X4O4jGwsVQWMrk+oPzLnZOa2dA2uj7AIgG1Nh8cKunQiB5GEirAAhBm5E1DDVJdycG/8VJuIo99s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24309},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.2.0.tgz","_integrity":"sha512-mRQMAYNCZDiQa4J3QV6Vav0KQOfILiLp0NXNSuONgwLbtw4GBjqfod1vDVT6DlpQtwVImPEAJoZ95nWgd5/YJg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.2.0 <2.0.0-internal.4.3.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.2.0_1683329455369_0.6755043304342434","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.3.0.157531":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.3.0.157531","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.3.0.157531","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ee462aeb2244a61822ce7ed9c7f244426540a58d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.3.0.157531.tgz","fileCount":36,"integrity":"sha512-paRRRkXXXB5vZ+cwukV94lZJr/xUdnmOI/jdo3QGvdLDANlsL3utm/H68BAPp+/au1Jzy8wJ0OAUILzX86k2XA==","signatures":[{"sig":"MEYCIQDIYrKqtEt2YGSHWPbgtj52pm15Caly5VcoQs6L6fmflgIhAKMbLbIa7LJN+I4s31NsLz70ZmMevWhvOUgVULcl3UOh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24303},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.3.0.157531.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.3.0.157531.tgz","_integrity":"sha512-paRRRkXXXB5vZ+cwukV94lZJr/xUdnmOI/jdo3QGvdLDANlsL3utm/H68BAPp+/au1Jzy8wJ0OAUILzX86k2XA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.3.0.157531","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.3.0.157531_1683579044375_0.36619237367828417","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.3.0.158678":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.3.0.158678","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.3.0.158678","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"3b6e40d8cf483f1999069b01b86bde152d2c6efd","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.3.0.158678.tgz","fileCount":27,"integrity":"sha512-f/rVMRQwlfE26VtsEwopb8tUfcc3H6DbX78pqqGDPw4VnrZGaGUBtCMSXIowAhjV3+FqPl4aDw0bdUhV9gCnPQ==","signatures":[{"sig":"MEUCIGSaO9ikM6b5FN2L7cr7rJMjHaT2HYUNmaLnZPEB4I8EAiEAjpFFlOEbotyMTCQ6zw/5lT5VyJxCLSDBwY4Abgc3r4s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.3.0.158678.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.3.0.158678.tgz","_integrity":"sha512-f/rVMRQwlfE26VtsEwopb8tUfcc3H6DbX78pqqGDPw4VnrZGaGUBtCMSXIowAhjV3+FqPl4aDw0bdUhV9gCnPQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.3.0.158678","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.3.0.158678_1683736975472_0.8494319677492788","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.3.0.159619":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.3.0.159619","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.3.0.159619","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e90bfc372db9aac957d4306a8e3a10fc3dd943b0","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.3.0.159619.tgz","fileCount":27,"integrity":"sha512-gwAhONFZWshwpZXS8QFfAf3tkeZPWoN8N8OpXvblamYNmg4uSetIO70mRAbFit+6hRaXBKolQEyD4PMehmtNqw==","signatures":[{"sig":"MEYCIQDRaYTHAQh4Uf+Ft9tNceDOaRLDw4PvwH+aBtrtyHrDrgIhAKlOLn0eY/J1cnu+JFQsij4UKV9BU80kvsy94iJZGalu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.3.0.159619.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.3.0.159619.tgz","_integrity":"sha512-gwAhONFZWshwpZXS8QFfAf3tkeZPWoN8N8OpXvblamYNmg4uSetIO70mRAbFit+6hRaXBKolQEyD4PMehmtNqw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.3.0.159619","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.3.0.159619_1683837526737_0.09833269398150235","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.2.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.2.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.2.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"4b6a0117b6df57a0d4963223e8f98b34d6bd3ea9","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.2.1.tgz","fileCount":36,"integrity":"sha512-7s2a3GM9/vKRvS/RiSMcJFR0ejgPacdeE5KRfMItOD5mA5FV+QqeiWUuDOHPHUdClUVFORdtQDYLDmitc/b8ow==","signatures":[{"sig":"MEQCIGhflYvKrTJykTKE03dYPjyoMOy//Idedn5yagAc2jwZAiBx9uMJwqwi5R16mp7quCpKrJEbJanOKHbQiHi7mwJXCA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24309},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.2.1.tgz","_integrity":"sha512-7s2a3GM9/vKRvS/RiSMcJFR0ejgPacdeE5KRfMItOD5mA5FV+QqeiWUuDOHPHUdClUVFORdtQDYLDmitc/b8ow==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.2.1 <2.0.0-internal.4.3.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.2.1_1683840022202_0.5954364805231198","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.3.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.3.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.3.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"ebb7e709869f33b2d30dd85b53a3f3262c3cfda8","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.3.0.tgz","fileCount":27,"integrity":"sha512-WuKv6gbZDCZfqijY7XnsoSamemnotQ4jNP6Q54ITG8N3r/kiNGWUyZpXeil9nx/kf2IpnMIJM48ia2hZJrFkuw==","signatures":[{"sig":"MEUCICTtmxz68dMtDAX0bh3IhT0nEwzdFua2Ca+4orM61NiEAiEAqtuRWcYYbwWiE1nmAV9UYiAJ7gFBQuSDdGmq8sfTT6Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20947},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.3.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.3.0.tgz","_integrity":"sha512-WuKv6gbZDCZfqijY7XnsoSamemnotQ4jNP6Q54ITG8N3r/kiNGWUyZpXeil9nx/kf2IpnMIJM48ia2hZJrFkuw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.3.0 <2.0.0-internal.4.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.3.0_1684435393815_0.7299888547955704","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.4.0.161322":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.4.0.161322","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.4.0.161322","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"e2a21a67603a33e0fbedf58c76bec887393baf63","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.4.0.161322.tgz","fileCount":27,"integrity":"sha512-qgYBNKELk64L6ZnSBlY5IYIJPBHLQlXCuGwPRTCe/jjxp41/f0hW5hcRESqxToGTliqCUacBj9ldZRBaKQiavg==","signatures":[{"sig":"MEQCIFwEUzUbxI+2jLNm767ON8qm2NOstXJt4f3S9PuiYqSrAiBvKrtDYKKuLImXMB72pSwK4oSCcXImHbcEDENs68Alaw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.4.0.161322.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.4.0.161322.tgz","_integrity":"sha512-qgYBNKELk64L6ZnSBlY5IYIJPBHLQlXCuGwPRTCe/jjxp41/f0hW5hcRESqxToGTliqCUacBj9ldZRBaKQiavg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.4.0.161322","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.4.0.161322_1684436691501_0.9519336749304748","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.4.0.161516":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.4.0.161516","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.4.0.161516","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"fef9f11dcfcb66fda1adabb6481ee436cf9426c1","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.4.0.161516.tgz","fileCount":27,"integrity":"sha512-vz9L8EEnCDYESSSXTGiVN+E7A5xH1k7cxrNBb/tR9iWLbg4yP+hUrymifsrNKYxUFo8FYX3yUl9IUsnEW/oAbA==","signatures":[{"sig":"MEUCIB8Ghnz+Q4d/OvKG4wbCRBf5yhWE0wbbLPQ2YozkxRMLAiEA8tf6vtpLriyPwuDImippoTiCGooBgqPYC5Ld1NdVqwk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.4.0.161516.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.4.0.161516.tgz","_integrity":"sha512-vz9L8EEnCDYESSSXTGiVN+E7A5xH1k7cxrNBb/tR9iWLbg4yP+hUrymifsrNKYxUFo8FYX3yUl9IUsnEW/oAbA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.4.0.161516","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.4.0.161516_1684459889506_0.06392504964787649","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.4.0.161652":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.4.0.161652","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.4.0.161652","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f32a7979f5906facc09035fc928cd8ac8e0e891f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.4.0.161652.tgz","fileCount":27,"integrity":"sha512-f6bqE53ER0mpPk7Z+nDOYTbEQebwBr82/+Q/+hhNSktvyzWkI9dlqI5ALuOOYyP4au9guFbymKMrul9csiH5rg==","signatures":[{"sig":"MEUCIHKwa+3kIClxBscIiRcBj4FAxLrnxkFw0KIGZyIy7rUSAiEApmnicHB2Cr54MgbCgLL0zTIa4Ok4URbJ9HeAqkq2v4A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.4.0.161652.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.4.0.161652.tgz","_integrity":"sha512-f6bqE53ER0mpPk7Z+nDOYTbEQebwBr82/+Q/+hhNSktvyzWkI9dlqI5ALuOOYyP4au9guFbymKMrul9csiH5rg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.4.0.161652","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.4.0.161652_1684526285734_0.8035981631837326","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.4.0.161784":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.4.0.161784","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.4.0.161784","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9b418ffaf9b014ab67718e511fdcfcccee5b3ebe","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.4.0.161784.tgz","fileCount":27,"integrity":"sha512-pi1pj5MB0LMERpNCVsI45AL/AROM09Ysx2nPU4OFc12mMCRBcsIIKaVbErGw+z6FQdptcsvVIJViLP2vCcVaXw==","signatures":[{"sig":"MEUCIQDRQlqeLxZjZSnzfRNVXhBezZcMyvshwuDf30Z7VjV4OgIgVT5c+XfObYLDpJXQE6uqbS1ovc/nDgZrDkcsrWmNhbE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.4.0.161784.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.4.0.161784.tgz","_integrity":"sha512-pi1pj5MB0LMERpNCVsI45AL/AROM09Ysx2nPU4OFc12mMCRBcsIIKaVbErGw+z6FQdptcsvVIJViLP2vCcVaXw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.4.0.161784","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.4.0.161784_1684544035428_0.6324434389239564","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.4.0.162089":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.4.0.162089","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.4.0.162089","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"490b3af5d8fea7d3924388fb7bfa11e15ed48b2e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.4.0.162089.tgz","fileCount":27,"integrity":"sha512-Dh28iDuiKocw/qr1Lit/t88PBvkpOUmdZcWcqegeC7NGiseEuEKW5bgkl3ldNU6k9Fuzl/2nldl1KYAT+G63NQ==","signatures":[{"sig":"MEUCIQCbM16YeI+dN/g21rIgoJ1aw0iQOYUzms37z7DaRGvIAAIge96i5sY4AwFEZYva5zvK4fBxgrEd/RO9cXLzAuXgV7A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.4.0.162089.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.4.0.162089.tgz","_integrity":"sha512-Dh28iDuiKocw/qr1Lit/t88PBvkpOUmdZcWcqegeC7NGiseEuEKW5bgkl3ldNU6k9Fuzl/2nldl1KYAT+G63NQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.4.0.162089","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.4.0.162089_1684861610310_0.4692000332804609","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.4.0.162253":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.4.0.162253","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.4.0.162253","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"2a9bf0ad730f8571e06a0aea7ff5068e95cf784e","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.4.0.162253.tgz","fileCount":27,"integrity":"sha512-hc66hAhX2zOSRzEHHMuMuHAbF9qcERx6sspZobL5nivOnB1GF6wYMl2KpFpW9O9UE8hoHCwX9EyB5F09KLbTgw==","signatures":[{"sig":"MEUCIQDSkvJqhiWdnLl9IH2EbxuU8NZDKzPgUi28hYXLe0AohwIgSJOwkdI9nmIcDPl1RGZMnRyqqyKeF5zQXLukJ5shtd8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.4.0.162253.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.4.0.162253.tgz","_integrity":"sha512-hc66hAhX2zOSRzEHHMuMuHAbF9qcERx6sspZobL5nivOnB1GF6wYMl2KpFpW9O9UE8hoHCwX9EyB5F09KLbTgw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.4.0.162253","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.4.0.162253_1684912588753_0.750471179348378","host":"s3://npm-registry-packages"}},"2.0.0-dev.4.4.0.162574":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.4.4.0.162574","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.4.4.0.162574","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"dc2c9ea1f0088a6fda4cdcced747d6c372e04b0f","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.4.4.0.162574.tgz","fileCount":27,"integrity":"sha512-McYcRDIQYgYosKjnhKYUDNs3bu1LgdrPgqnadbHScVI/4G00uBrf0HrbOwSuwXmYH3UA2CsCZDhUmuD4KXy04g==","signatures":[{"sig":"MEYCIQDVrnlkQDRPcW0n7wRtTA3LIqWvLxEdYGNysXf2zpSfyAIhAOmpu0AVgZcjI6J6z/Nwrd1Q8ajvVkImXKlwMMPyXVwZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20927},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.4.4.0.162574.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.4.4.0.162574.tgz","_integrity":"sha512-McYcRDIQYgYosKjnhKYUDNs3bu1LgdrPgqnadbHScVI/4G00uBrf0HrbOwSuwXmYH3UA2CsCZDhUmuD4KXy04g==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.4.4.0.162574","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.4.4.0.162574_1685038795894_0.11658987218825101","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.4.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.4.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.4.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0ffa37a17752998a31019ae2a1f282d9446ec416","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.4.0.tgz","fileCount":27,"integrity":"sha512-2FtUdaVyf9uiP2CqaWjar/cnmzdwAVyTh3G+SpbRjfXgaE3k4AFGyGBi+XgnoGvcg5XWof43o9qUZfzJ+Mo4Zg==","signatures":[{"sig":"MEQCIEb5dCT+qoCarINhS7PR4fQupHrYiNA9xgUyGpMVbR7PAiAh5L8AuwIemmriH9eh0KOWJTOWnKxW1zJexQbv91VNPg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20998},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.4.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.4.0.tgz","_integrity":"sha512-2FtUdaVyf9uiP2CqaWjar/cnmzdwAVyTh3G+SpbRjfXgaE3k4AFGyGBi+XgnoGvcg5XWof43o9qUZfzJ+Mo4Zg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.4.0 <2.0.0-internal.4.5.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.4.0_1685987038471_0.24150552145669013","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.0.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.0.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.0.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"7457c4fe4e80e8919646bbf4fb240e7ba3114faa","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.0.0.tgz","fileCount":27,"integrity":"sha512-i5DxnXonhTnwRwrWPIRvevLlEKgJgqw8AOENdHiI6oiDzus3W+/2/y4FlaqjsI1aeaAITVVIYNOjfp1CUbJ5Mg==","signatures":[{"sig":"MEYCIQCdNbGxlHG3ANdnaTVfMGrhNlg6UFJcIyThMoHRp6EbWQIhAPCYMhdY5fg+aPFPheWWM1vVISDZ8XD5xfrKCBRUnuOY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21049},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.0.0.tgz","_integrity":"sha512-i5DxnXonhTnwRwrWPIRvevLlEKgJgqw8AOENdHiI6oiDzus3W+/2/y4FlaqjsI1aeaAITVVIYNOjfp1CUbJ5Mg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.0.0 <2.0.0-internal.5.1.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.17.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.17.0","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.0.0_1686012024966_0.5816754193874156","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.3.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.3.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.3.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"65b8694c16f2dd22ed81abb1536118e2bf0ffe88","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.3.1.tgz","fileCount":27,"integrity":"sha512-PW0BA8UHgFWe5sRhrOKWCtj6iR5rFwIqdP1DtAaFUoa+2p6+nXeo2hAq1JCUmR4WKa96lqbtjM5LSecpX3n5yQ==","signatures":[{"sig":"MEUCIQDRj8vxCdVyKeItsTOa++qd8TKOujsuDpkr7ATdCqCgnwIgcmwrlNeBw07Osk1vqVE2Sbgapynigu0SZrKrBCgRwz0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20947},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.3.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.3.1.tgz","_integrity":"sha512-PW0BA8UHgFWe5sRhrOKWCtj6iR5rFwIqdP1DtAaFUoa+2p6+nXeo2hAq1JCUmR4WKa96lqbtjM5LSecpX3n5yQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.3.1 <2.0.0-internal.4.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.18.2","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.18.2","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.3.1_1686629148688_0.15451721696919019","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.4.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.4.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.4.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"034c900e430889e664fae23e696f87ab8e35ed7c","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.4.1.tgz","fileCount":27,"integrity":"sha512-SlWjR8nb15iBi5LR0ohnD10+QDy712lMBp28Zlo2C2gdNaiNOllbGW6kUC3AiY9JQX4XCLGnEccuiH3+OUehyg==","signatures":[{"sig":"MEQCIDIYtSpf8SKeKuPNpyzIITy8GyLhaHCwlv6IG4Nah7GSAiA4WNj6DGC0BVrxg8XnGVS2y+18sAEAQMyo0IqZAEFP5A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20998},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.4.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.4.1.tgz","_integrity":"sha512-SlWjR8nb15iBi5LR0ohnD10+QDy712lMBp28Zlo2C2gdNaiNOllbGW6kUC3AiY9JQX4XCLGnEccuiH3+OUehyg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.4.1 <2.0.0-internal.4.5.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.18.2","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.18.2","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.4.1_1686773299847_0.1229057153594264","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.0.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.0.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.0.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"04ec06d829bc3325e7fe3519c73f636b0cd45923","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.0.1.tgz","fileCount":27,"integrity":"sha512-zrzMC21N9yRiIzgzIsOEfV4Qp2z8yh2NiWpm4mPI4UJvbY+tPGACYme1ikxHsVjcr6TeliDpULMT5jbMknFx2Q==","signatures":[{"sig":"MEQCIDV8WwP6cpPFh+FVX2fmUVAlGZ7D8vxUJhEnMynL9qxeAiAExEuGaW2P+TbQ3V5SB4l5UcNJa+8OcKvPF2gigZfU3g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21049},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.0.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.0.1.tgz","_integrity":"sha512-zrzMC21N9yRiIzgzIsOEfV4Qp2z8yh2NiWpm4mPI4UJvbY+tPGACYme1ikxHsVjcr6TeliDpULMT5jbMknFx2Q==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.0.1 <2.0.0-internal.5.1.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.18.2","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.18.2","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.0.1_1686777453143_0.16813448204684533","host":"s3://npm-registry-packages"}},"2.0.0-dev.5.2.0.169897":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.5.2.0.169897","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.5.2.0.169897","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"b8de1997031714e701646d80b563b24bd2020d8b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.5.2.0.169897.tgz","fileCount":28,"integrity":"sha512-659TK4v+hFS+4hs8OHwBsZyLKBtzzvHSQoQ4orzc6U+55XVX6Pdtl4jKJCPHEOzj2WDuJR4QkSZg5ZhfwRSbqg==","signatures":[{"sig":"MEYCIQDlfjM8e6ViVa3/eWZynk4DA52uaMGXUH0BTYP3IKhzCgIhAMxvP7oTdHYtT00Qs1rnMCt2JQNjci+gLAoaT3bVNSgk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21854},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.5.2.0.169897.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub generate typetests --prepare --dir . --pin"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.5.2.0.169897.tgz","_integrity":"sha512-659TK4v+hFS+4hs8OHwBsZyLKBtzzvHSQoQ4orzc6U+55XVX6Pdtl4jKJCPHEOzj2WDuJR4QkSZg5ZhfwRSbqg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.5.2.0.169897","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.20.0-169245","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.20.0-169245","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.5.2.0.169897_1687362376890_0.24236850182314207","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.1.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.1.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.1.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"8cf6f768fe653e54826b61a309b71981d441891d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.1.0.tgz","fileCount":28,"integrity":"sha512-A0CmSxWzHjwI9gWpFUqfitbLRNlZ2yWnmScXHJI1Bp69bmq04xN8G33HbkLsi0PN7rdnq2YfjDoQKft57PiDsQ==","signatures":[{"sig":"MEUCIQCRDrAwNpWt4bhHL1PjMMlkpYKIaWn49CDwC58oQC8ftgIgCdz+n50uLQfyWtasv70qsSxxpT5gregtxabaS6ZH8t0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22247},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub generate typetests --prepare --dir . --pin"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.1.0.tgz","_integrity":"sha512-A0CmSxWzHjwI9gWpFUqfitbLRNlZ2yWnmScXHJI1Bp69bmq04xN8G33HbkLsi0PN7rdnq2YfjDoQKft57PiDsQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.1.0 <2.0.0-internal.5.2.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.19.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.19.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.1.0_1687371744806_0.8148422193258364","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.1.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.1.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.1.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1e4dc4dfebb085ffec62bb57d4beb27540577965","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.1.1.tgz","fileCount":28,"integrity":"sha512-x4LaXK3JriZWjCMYc+SICs92q3MWP7S3jrZ8C5dMPukkL3vc4rJ9eV46WrUX3K19tzd/0aP9aWKmM09erAimgw==","signatures":[{"sig":"MEYCIQCo5HUauOOfpX6+XtFbYl7espEe1eFxpcKi06Pk6X8YGQIhAIfeo9tuVciPsnxs8q1okrBM030asfYZ/5PK99s0cieH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22247},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub generate typetests --prepare --dir . --pin"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.1.1.tgz","_integrity":"sha512-x4LaXK3JriZWjCMYc+SICs92q3MWP7S3jrZ8C5dMPukkL3vc4rJ9eV46WrUX3K19tzd/0aP9aWKmM09erAimgw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.1.1 <2.0.0-internal.5.2.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.19.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.19.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.1.1_1688080849810_0.3303061831892484","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.2.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.2.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.2.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"29e130c2045b1f8b3b7e5418e42c54b275c22f06","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.2.0.tgz","fileCount":28,"integrity":"sha512-qxJciZTsTB8U4mIgNED5lWuNzgqXhq/C+1WKIFWCtexWKg4/vOJxDxRDtzE8649Jk6ajdzOfz3nr7Jz7chCv6w==","signatures":[{"sig":"MEYCIQCk7n4ShpD2cATpGhXcwQUnKQ1FBsxZgCMV95reP7sx2AIhALr4mue+PgXgJ/JKFZ3MsFYP/SHVUJ59i7XFNDTHeb1n","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22298},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.2.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub generate typetests --prepare --dir . --pin"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.2.0.tgz","_integrity":"sha512-qxJciZTsTB8U4mIgNED5lWuNzgqXhq/C+1WKIFWCtexWKg4/vOJxDxRDtzE8649Jk6ajdzOfz3nr7Jz7chCv6w==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.2.0 <2.0.0-internal.5.3.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.20.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.20.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.2.0_1688584336755_0.9496368988933026","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.3.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.3.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.3.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a004b207b90f1976c0cf2fc74c8fa620a6732869","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.3.0.tgz","fileCount":28,"integrity":"sha512-84V9ilpRv0twar9wsF4w/Ld1DpAb338NvhT7y3HlvP8K9H8HCZrOkAKU+Bgm6NvSpgKKqHLgag9gcDfVIaZWNQ==","signatures":[{"sig":"MEUCIQC+FkHzBfBR1sK7fI3XTls/11zeW4hVc9HyTJ/O9+mOGwIgC5W+ZsQebdk6ZoT/whKYvblJzizejvZe25FdO7RfgzA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22355},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.3.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub typetests --dir . --reset --previous --normalize"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.3.0.tgz","_integrity":"sha512-84V9ilpRv0twar9wsF4w/Ld1DpAb338NvhT7y3HlvP8K9H8HCZrOkAKU+Bgm6NvSpgKKqHLgag9gcDfVIaZWNQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.3.0 <2.0.0-internal.5.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.21.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.21.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.3.0_1689382539848_0.5998534469513404","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.4.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.4.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.4.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"f7ad6c1ad2c099c391bacbd965197477c7d322ca","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.4.2.tgz","fileCount":27,"integrity":"sha512-9NZbwr63b13WgolYSkMGulkg1NPK/I5O17nUCFqiMAnbyzK870NDgLJtQPGFhTSC0Jdzd0U+sEZVp/BV/y1UIA==","signatures":[{"sig":"MEUCIQCsxhhRqzZ5UMTD1ZafdgE5sYEaboxjGYdQJD8jLbYfewIgKHFjarJUgijc6xNxOIlRJMZ4ZuDLW2TBeDzgVmA2uRQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20998},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.4.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.4.2.tgz","_integrity":"sha512-9NZbwr63b13WgolYSkMGulkg1NPK/I5O17nUCFqiMAnbyzK870NDgLJtQPGFhTSC0Jdzd0U+sEZVp/BV/y1UIA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.4.2 <2.0.0-internal.4.5.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.18.2","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.18.2","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.4.2_1689973829220_0.05372195601007412","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.3.1":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.3.1","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.3.1","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"a2fcdebbf4ba013acf88b7cf615d7fc47b33e49d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.3.1.tgz","fileCount":28,"integrity":"sha512-zWEeggsCN0uTMRNMt1qULkrk/4xOTQVhQAbNgNJH15e41KDCV9hczqN4nAdr8Tci2n49Xdu0vI/yLhoYmSwjsQ==","signatures":[{"sig":"MEYCIQDeNomU7KF5wPFoitdKRWV50EGfqtTomFtWTgOT9EFMvwIhAPMe+xvM7EsUVc3aOqJ243hGgQyWd1dGCI1yhAm8rlYg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22355},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.3.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub typetests --dir . --reset --previous --normalize"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.3.1.tgz","_integrity":"sha512-zWEeggsCN0uTMRNMt1qULkrk/4xOTQVhQAbNgNJH15e41KDCV9hczqN4nAdr8Tci2n49Xdu0vI/yLhoYmSwjsQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.3.1 <2.0.0-internal.5.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.21.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.21.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.3.1_1690223898245_0.7092860844150846","host":"s3://npm-registry-packages"}},"2.0.0-dev.5.3.2.178189":{"name":"@fluidframework/test-client-utils","version":"2.0.0-dev.5.3.2.178189","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-dev.5.3.2.178189","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1fc5c885ea41288331f235202045a9cb17d2a142","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-dev.5.3.2.178189.tgz","fileCount":28,"integrity":"sha512-8AxRYQAXW6oPQqbKtidBLsk2Q5QvoJw0Jr60c2oPGZ/qIOnI0peXJNcDMERVG5+bKSyhgl7AdXddp8K1NYEqUg==","signatures":[{"sig":"MEYCIQCpJ4QztTlKERoZKu8stLmTHsKUQ0IfEcu5Ztjzw10jhAIhAOdRUwBH50GnEP7OQvHjr2YI/7RcXj5exrSW7TBEoEwN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22335},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-dev.5.3.2.178189.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub typetests --dir . --reset --previous --normalize"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-dev.5.3.2.178189.tgz","_integrity":"sha512-8AxRYQAXW6oPQqbKtidBLsk2Q5QvoJw0Jr60c2oPGZ/qIOnI0peXJNcDMERVG5+bKSyhgl7AdXddp8K1NYEqUg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"2.0.0-dev.5.3.2.178189","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.21.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.21.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-dev.5.3.2.178189_1690310094984_0.05600160426346501","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.4.3":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.4.3","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.4.3","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"c27cd2913430df391630fbddd3cc001eecca0724","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.4.3.tgz","fileCount":27,"integrity":"sha512-V9LNRnpoqN0D0/nfmVjnQvM6EXAzoSJAA7yg/sxkkoUo8hwPFyhQpsEksJiOApQAzTslUEjSRZ4QvT5AMlEJfw==","signatures":[{"sig":"MEQCIAPRJimHbZuoiJcFcdvfwowNBy5Xz4RCbnxPFUNnube5AiAweK2Z8gzQCF2fyrtctJ1iDYuFz9X2biAvE+r5kb9yOg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20998},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.4.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.4.3.tgz","_integrity":"sha512-V9LNRnpoqN0D0/nfmVjnQvM6EXAzoSJAA7yg/sxkkoUo8hwPFyhQpsEksJiOApQAzTslUEjSRZ4QvT5AMlEJfw==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.4.3 <2.0.0-internal.4.5.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.18.2","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.18.2","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.4.3_1690486477308_0.5536925282778424","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.3.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.3.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.3.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"cdbb6b65bb39b370a730df0b7cc23c2e6c956ef2","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.3.2.tgz","fileCount":28,"integrity":"sha512-niWzOz8taLTERCOlm/jAf5V6Ul6851vXqbEACtKciuPep2mHrh+b1c72St3pFgeCUWlEfhUPxab9QUvFaquq0g==","signatures":[{"sig":"MEYCIQCl7GrWpQlIfp/6rqForVgRaKZRS8L/20UsyLwnY7ut7gIhALQ3En+uVCOKRkRFbJag1AsG2hDB9jO3+QWm5dGhZrip","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22355},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.3.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub typetests --dir . --reset --previous --normalize"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.3.2.tgz","_integrity":"sha512-niWzOz8taLTERCOlm/jAf5V6Ul6851vXqbEACtKciuPep2mHrh+b1c72St3pFgeCUWlEfhUPxab9QUvFaquq0g==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.3.2 <2.0.0-internal.5.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.21.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.21.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.3.2_1690491937934_0.5884020576052267","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.4.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.4.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.4.4","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"40d208c7dfd3bf55b28ad6f2ce1614a4cd55468d","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.4.4.tgz","fileCount":27,"integrity":"sha512-e4d3keuce1pVcu0+gz8O6GPIbpVeBy2dP5m6DIYkjeAJ/d4tabFItXrm/34VQEE/AfjiS9Y0ngpCGAgljLCwvg==","signatures":[{"sig":"MEUCIHNTcz/Nz6d5gsZEVp7MloVWaU/jGTHx8aJHiOwXHZavAiEAgSnGD/dkDeH/1DuSQg6x1hUQLBVy83iS/3OOA8aim1I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20998},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.4.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.4.4.tgz","_integrity":"sha512-e4d3keuce1pVcu0+gz8O6GPIbpVeBy2dP5m6DIYkjeAJ/d4tabFItXrm/34VQEE/AfjiS9Y0ngpCGAgljLCwvg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.4.4 <2.0.0-internal.4.5.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.18.2","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.18.2","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.4.4_1691098023914_0.016445905814567396","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.4.0":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.4.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.4.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"1a5fac014e8b16856f7cea983b669e9ef17b794b","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.4.0.tgz","fileCount":28,"integrity":"sha512-6ij1JIMSjRlRl/gC+GhMe5nltaGVB874xmyQqprsfGHb1e2UV9fAAeW2JCnSHgramFioxzwRYw2cahRM2GjzjQ==","signatures":[{"sig":"MEUCIDILh+rLg3CHCZnYAs2XpS2waSgXrZzf68kvfdoQnVRGAiEA1DhniVsDK5T2Ho4klDF42ZxXhKdVgDxA1erspMskgAM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22429},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.4.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf --glob \"dist\" \"lib\" \"*.tsbuildinfo\" \"*.build.log\"","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub typetests --dir . --reset --previous --normalize"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.4.0.tgz","_integrity":"sha512-6ij1JIMSjRlRl/gC+GhMe5nltaGVB874xmyQqprsfGHb1e2UV9fAAeW2JCnSHgramFioxzwRYw2cahRM2GjzjQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.11.0","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.16.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.4.0 <2.0.0-internal.5.5.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.21.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.21.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.4.0_1691098298738_0.4755803825560352","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.3.4":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.3.4","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.3.4","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"15dae471aed12416416ec28e610531caa6f1bc34","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.3.4.tgz","fileCount":28,"integrity":"sha512-dpW49VqAdpddzQ6vuPy0qdbVC78jm/wmtx+W/hsXtcxvqnDT0yCUPZnj1Iw2BKzKs6HtamwOOkemHJnizmyCLQ==","signatures":[{"sig":"MEUCIQC6ahMZFcDkoPmcU6xe11SSLnO9HoqOvi+XMKgFipd8/wIgKcNurrCv3KFr1lrvwkOCFvodhvaToZTKUzy76LVvAdo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22355},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.3.4.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub typetests --dir . --reset --previous --normalize"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.3.4.tgz","_integrity":"sha512-dpW49VqAdpddzQ6vuPy0qdbVC78jm/wmtx+W/hsXtcxvqnDT0yCUPZnj1Iw2BKzKs6HtamwOOkemHJnizmyCLQ==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.3.4 <2.0.0-internal.5.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.21.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.21.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.3.4_1691439823564_0.19375745797372246","host":"s3://npm-registry-packages"}},"2.0.0-internal.5.4.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.5.4.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.5.4.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"c8e0e074cb5564be4f972268a353d8bda1ce70af","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.5.4.2.tgz","fileCount":28,"integrity":"sha512-A0bj4oT5mjO9NBO/smMXuK+ibZPGKLhzqh6m/+lKTqcv+CKgpMj909gj0Dfnf9uuMEVS6VEt+BhvtASR5o2eWg==","signatures":[{"sig":"MEYCIQCZe7amm+VuA/n0/+RVi1ZFhT+4qGhvCJrOMwkmqG8BKQIhAL3740cY92FsowZHQnxX2oHo6qRHYHprN8loU6Ks/Ka/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22429},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.5.4.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\n## WARNING: This package is deprecated as of 2.0.0-internal.5.1.0 and will be removed in an upcoming release.\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"fluid-build . --task build","clean":"rimraf --glob \"dist\" \"lib\" \"*.tsbuildinfo\" \"*.build.log\"","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"fluid-build . --task compile","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"fluid-build . --task commonjs","typetests:prepare":"flub typetests --dir . --reset --previous --normalize"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.5.4.2.tgz","_integrity":"sha512-A0bj4oT5mjO9NBO/smMXuK+ibZPGKLhzqh6m/+lKTqcv+CKgpMj909gj0Dfnf9uuMEVS6VEt+BhvtASR5o2eWg==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.11.0","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.16.0","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.5.4.2 <2.0.0-internal.5.5.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.21.0","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.21.0","@fluidframework/build-common":"^1.2.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.5.4.2_1692546756857_0.19003785513000526","host":"s3://npm-registry-packages"}},"1.3.7":{"name":"@fluidframework/test-client-utils","version":"1.3.7","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.3.7","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"0b5c4738e0fd93ab5d2dcf4e969950387a99fb38","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.3.7.tgz","fileCount":34,"integrity":"sha512-OD8Ak3X4ZzbpgG5QyqB6DG/9UgLsGxJ0wosKsw2BDgIfB/Gq2VsSeKjeo1xRZsOR0XTYDMGo6Ai0sHPRq/fnPQ==","signatures":[{"sig":"MEUCIF1LJ4+gZAk1YTO7vTKkv005yUdLmpnM92scUHPBDzP1AiEAjKMqAOXQzl11gsT83zFAEvWaRt09xGw58YdNQFh2qL0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21561},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.3.7.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","tsfmt":"tsfmt --verify","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","tsfmt:fix":"tsfmt --replace","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-validator -g -d .","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"14.21.3","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.3.7","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.3.0"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.2.74327","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.3.7_1693504046829_0.07116074124408267","host":"s3://npm-registry-packages"}},"2.0.0-internal.4.3.2":{"name":"@fluidframework/test-client-utils","version":"2.0.0-internal.4.3.2","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@2.0.0-internal.4.3.2","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"c2270748c66bc93f4f10da2a854462ab535e4a55","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-2.0.0-internal.4.3.2.tgz","fileCount":27,"integrity":"sha512-Db2m7Qs6oMA/+85nq35OPeNz9Wyg8Qju07klpJLrnJWTh5yPB9ElIiMjUIluPo+z2S5U3W27lgcoELUS97VTmA==","signatures":[{"sig":"MEUCIQCVDcNLULNb2YP02V9a40TksY17t6NV/ehn1c8of+yaVQIgK0lQtaFPaNMju4HAgkUBCQrgAijDB5SRxp/enIEA5Wk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20947},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-2.0.0-internal.4.3.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n<!-- AUTO-GENERATED-CONTENT:START (README_DEPENDENCY_GUIDELINES_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Using Fluid Framework libraries\n\nWhen taking a dependency on a Fluid Framework library, we recommend using a `^` (caret) version range, such as `^1.3.4`.\nWhile Fluid Framework libraries may use different ranges with interdependencies between other Fluid Framework libraries,\nlibrary consumers should always prefer `^`.\n\nNote that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version\nscheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the\n[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md)\npackage for more information including tools to convert between version schemes.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n\n-   `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n-   `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", {\n\tid: \"123\",\n\tname: \"Test User\",\n});\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```\n\n<!-- AUTO-GENERATED-CONTENT:START (README_TRADEMARK_SECTION:includeHeading=TRUE) -->\n\n<!-- prettier-ignore-start -->\n<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->\n\n## Trademark\n\nThis project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.\n\nUse of these trademarks or logos must follow Microsoft's [Trademark & Brand\nGuidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\n\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\n\n<!-- prettier-ignore-end -->\n\n<!-- AUTO-GENERATED-CONTENT:END -->\n","scripts":{"tsc":"tsc","lint":"npm run prettier && npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist lib *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","format":"npm run prettier:fix","lint:fix":"npm run prettier:fix && npm run eslint:fix","prettier":"prettier --check . --ignore-path ../../../.prettierignore","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","prettier:fix":"prettier --write . --ignore-path ../../../.prettierignore","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"fluid-type-test-generator","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"/mnt/vss/_work/1/pack/scoped/fluidframework-test-client-utils-2.0.0-internal.4.3.2.tgz","_integrity":"sha512-Db2m7Qs6oMA/+85nq35OPeNz9Wyg8Qju07klpJLrnJWTh5yPB9ElIiMjUIluPo+z2S5U3W27lgcoELUS97VTmA==","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"8.19.4","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"16.20.2","dependencies":{"uuid":"^8.3.1","sillyname":"^0.1.0","@fluidframework/test-runtime-utils":">=2.0.0-internal.4.3.2 <2.0.0-internal.4.4.0","@fluidframework/protocol-definitions":"^1.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","typeValidation":{"broken":{}},"devDependencies":{"eslint":"~8.6.0","rimraf":"^4.4.0","prettier":"~2.6.2","copyfiles":"^2.4.1","typescript":"~4.5.5","@types/uuid":"^8.3.0","concurrently":"^7.6.0","@fluid-tools/build-cli":"^0.18.2","@microsoft/api-extractor":"^7.34.4","@fluidframework/build-tools":"^0.18.2","@fluidframework/build-common":"^1.1.0","@fluidframework/eslint-config-fluid":"^2.0.0","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@2.0.0-internal.4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_2.0.0-internal.4.3.2_1694465788474_0.5077405156811772","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"@fluidframework/test-client-utils","version":"1.4.0","author":{"name":"Microsoft and contributors"},"license":"MIT","_id":"@fluidframework/test-client-utils@1.4.0","maintainers":[{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},{"name":"curtisman","email":"curtism@microsoft.com"}],"homepage":"https://fluidframework.com","bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"dist":{"shasum":"9daf5755b3170d1ad3bd103cf0b7382e93660c48","tarball":"https://registry.npmjs.org/@fluidframework/test-client-utils/-/test-client-utils-1.4.0.tgz","fileCount":34,"integrity":"sha512-iX69iWpAXrLgxOSMa1itkEgqpZV+eoBO8tQcRn+Zjv+w+7X0w65biVRP9xZnBkSj0DNW6I/+oDiFPdLPo1fjDw==","signatures":[{"sig":"MEUCICodowN/JuaKEiTD99SW1aFot+AZ4Ka7Escmr5TRbMJXAiEA0tbheUelxXCYIFqDouf/FOuEyjYr3wHCter7emR4GkM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":21662},"main":"dist/index.js","_from":"file:fluidframework-test-client-utils-1.4.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","scripts":{"tsc":"tsc","lint":"npm run eslint","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs","clean":"rimraf dist *.tsbuildinfo *.build.log","eslint":"eslint --format stylish src","lint:fix":"npm run eslint:fix","build:docs":"api-extractor run --local --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/doc-models/* ../../../_api-extractor-temp/","build:full":"npm run build","build:test":"tsc --project ./src/test/tsconfig.json","eslint:fix":"eslint --format stylish src --fix --fix-type problem,suggestion,layout","build:esnext":"tsc --project ./tsconfig.esnext.json","build:genver":"gen-version","build:compile":"concurrently npm:build:commonjs npm:build:esnext","ci:build:docs":"api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/","typetests:gen":"flub generate typetests --generate --dir . --no-generateInName","build:commonjs":"npm run tsc && npm run typetests:gen && npm run build:test","typetests:prepare":"flub generate typetests --prepare --dir . --pin","build:full:compile":"npm run build:compile"},"_npmUser":{"name":"ms-fluid-bot","email":"ffsa@microsoft.com"},"_resolved":"","_integrity":"","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"_npmVersion":"6.14.18","description":"Fluid client development and test utilities","directories":{},"sideEffects":false,"_nodeVersion":"18.17.1","dependencies":{"sillyname":"^0.1.0","@fluidframework/test-runtime-utils":"^1.4.0","@fluidframework/protocol-definitions":"^0.1028.2000"},"_hasShrinkwrap":false,"typeValidation":{"broken":{},"version":"1.4.0","baselineRange":"~1.3.0","baselineVersion":"1.3.1"},"devDependencies":{"eslint":"~8.6.0","rimraf":"^2.6.2","copyfiles":"^2.1.0","typescript":"~4.5.5","concurrently":"^6.2.0","typescript-formatter":"7.1.0","@microsoft/api-extractor":"^7.22.2","@rushstack/eslint-config":"^2.5.1","@fluidframework/build-tools":"^0.6.0","@fluidframework/build-common":"^0.24.0","@fluidframework/eslint-config-fluid":"^0.28.2000","@fluidframework/test-client-utils-previous":"npm:@fluidframework/test-client-utils@1.3.1"},"_npmOperationalInternal":{"tmp":"tmp/test-client-utils_1.4.0_1712697296500_0.049418032974619","host":"s3://npm-registry-packages"}}},"time":{"created":"2021-09-20T21:25:06.699Z","modified":"2026-07-29T21:14:44.176Z","0.48.0-38105":"2021-09-20T21:25:06.917Z","0.48.0-38142":"2021-09-21T16:03:12.108Z","0.48.0":"2021-09-21T20:10:31.053Z","0.48.1":"2021-09-23T22:31:38.335Z","0.48.2":"2021-09-27T19:59:56.450Z","0.48.3":"2021-09-30T20:32:16.852Z","0.49.0-39015":"2021-09-30T22:02:39.385Z","0.48.4":"2021-10-01T17:23:14.288Z","0.49.0-39313":"2021-10-04T23:24:33.050Z","0.48.5":"2021-10-05T22:01:03.583Z","0.49.0":"2021-10-06T23:03:49.581Z","0.49.1":"2021-10-11T16:26:45.030Z","0.49.2":"2021-10-11T22:25:14.441Z","0.50.0-41365":"2021-10-21T17:03:57.729Z","0.50.0-41540":"2021-10-22T15:53:23.485Z","0.50.0":"2021-10-25T16:52:57.697Z","0.50.1":"2021-10-27T22:56:59.961Z","0.51.0-43124":"2021-11-06T00:28:30.584Z","0.51.0":"2021-11-10T22:22:19.897Z","0.50.2":"2021-11-12T21:15:01.677Z","0.51.1":"2021-11-12T22:03:47.486Z","0.50.3":"2021-11-18T21:59:28.277Z","0.51.2":"2021-11-18T22:50:47.921Z","0.52.0-44610":"2021-11-19T23:03:32.205Z","0.52.0":"2021-11-22T22:22:33.642Z","0.51.3":"2021-11-23T20:32:14.765Z","0.52.1":"2021-11-23T21:50:51.233Z","0.50.4":"2021-11-24T00:17:46.069Z","0.53.0-46105":"2021-12-08T23:10:26.608Z","0.53.0":"2021-12-10T19:04:38.719Z","0.54.0-47413":"2021-12-29T18:50:17.653Z","0.54.0":"2022-01-03T22:39:40.701Z","0.54.1":"2022-01-05T22:06:51.344Z","0.54.2":"2022-01-11T20:54:04.137Z","0.55.0-48551":"2022-01-14T21:30:30.816Z","0.55.0":"2022-01-18T23:46:21.523Z","0.55.1":"2022-01-28T19:08:11.611Z","0.56.0-49831":"2022-01-28T20:35:24.031Z","0.56.0":"2022-01-29T00:34:58.919Z","0.54.3":"2022-02-03T02:23:42.707Z","0.56.1":"2022-02-03T02:36:30.855Z","0.55.2":"2022-02-03T02:37:41.502Z","0.56.2":"2022-02-10T00:00:57.817Z","0.55.3":"2022-02-11T01:31:24.951Z","0.56.3":"2022-02-11T01:34:42.701Z","0.57.0-51086":"2022-02-12T01:15:21.037Z","0.56.4":"2022-02-17T20:00:29.314Z","0.55.4":"2022-02-17T21:16:36.353Z","0.56.5":"2022-02-19T00:43:25.657Z","0.56.6":"2022-03-02T23:12:47.158Z","0.57.0":"2022-03-03T00:00:42.274Z","0.56.7":"2022-03-03T20:18:46.445Z","0.57.1":"2022-03-04T01:48:38.808Z","0.56.8":"2022-03-04T18:48:12.955Z","0.58.0-55561":"2022-03-04T20:07:49.479Z","0.58.0-55983":"2022-03-05T00:53:21.049Z","0.56.9":"2022-03-11T21:04:16.157Z","0.57.2":"2022-03-11T23:56:37.675Z","0.58.1000":"2022-03-14T20:27:27.038Z","0.58.1001":"2022-03-18T01:45:34.092Z","0.58.2000-58133":"2022-03-18T22:15:09.947Z","0.58.2000":"2022-03-23T20:44:11.671Z","0.58.2001":"2022-03-25T01:08:59.346Z","0.58.2002":"2022-03-28T18:58:45.416Z","0.56.10":"2022-03-28T22:07:50.247Z","0.56.11":"2022-03-29T00:24:37.122Z","0.58.3000-61081":"2022-04-12T01:56:40.810Z","0.59.2000-61729":"2022-04-14T20:40:56.230Z","0.59.1000-61898":"2022-04-15T23:18:23.542Z","0.59.1000":"2022-04-16T07:36:39.575Z","0.59.1001-62246":"2022-04-18T19:11:49.448Z","0.59.2000-63294":"2022-04-22T21:12:43.299Z","0.59.2000":"2022-04-27T21:36:23.402Z","0.59.2001":"2022-05-03T21:40:08.854Z","0.59.3000-66610":"2022-05-13T15:33:33.404Z","0.59.3000-67119":"2022-05-17T17:11:58.285Z","0.59.3000":"2022-05-18T17:46:57.507Z","0.59.1001":"2022-05-19T20:44:40.575Z","0.59.2002":"2022-05-19T22:48:35.440Z","0.59.2003":"2022-05-25T20:38:20.846Z","0.59.3001":"2022-05-25T20:49:50.998Z","0.59.3002":"2022-05-26T17:31:44.261Z","0.59.3003":"2022-05-27T21:17:46.231Z","0.59.4000-71128":"2022-06-02T18:58:50.023Z","0.59.4000-71130":"2022-06-02T19:11:36.866Z","0.59.4000":"2022-06-04T00:57:16.167Z","1.0.0":"2022-06-08T17:56:18.377Z","0.59.4001":"2022-06-08T18:00:50.967Z","1.0.1":"2022-06-15T23:40:11.155Z","1.1.0-75972":"2022-06-24T01:04:08.149Z","1.1.0-76254":"2022-06-24T20:49:00.993Z","1.1.0":"2022-06-25T03:49:31.642Z","0.59.4002":"2022-06-28T20:54:57.755Z","1.2.0-77818":"2022-07-01T00:07:06.051Z","1.2.0-78837":"2022-07-07T23:59:06.725Z","1.2.0":"2022-07-08T00:54:42.429Z","1.1.1":"2022-07-13T23:11:26.598Z","1.2.1":"2022-07-13T23:14:29.209Z","1.0.2":"2022-07-18T13:47:09.823Z","1.1.2":"2022-07-18T13:47:56.860Z","1.2.2":"2022-07-18T13:48:20.389Z","2.0.0-internal.1.0.0.81589":"2022-07-22T15:11:03.011Z","2.0.0-internal.1.0.0.81601":"2022-07-22T15:54:13.347Z","2.0.0-internal.1.0.0.82159":"2022-07-26T14:40:48.975Z","2.0.0-internal.1.0.0.82628":"2022-07-28T16:50:34.443Z","2.0.0-internal.1.0.0.82693":"2022-07-28T19:51:47.839Z","2.0.0-internal.1.0.0.83139":"2022-08-01T21:31:37.672Z","1.2.3-83900":"2022-08-04T20:02:49.693Z","2.0.0-internal.1.0.0.84253":"2022-08-08T19:31:21.730Z","2.0.0-internal.1.0.0":"2022-08-09T01:19:34.740Z","1.2.3-84921":"2022-08-11T21:31:59.965Z","1.2.3":"2022-08-11T22:42:24.669Z","1.2.4":"2022-08-25T01:57:17.868Z","1.2.5":"2022-08-31T23:48:29.291Z","2.0.0-internal.1.1.0":"2022-09-02T20:03:55.367Z","2.0.0-internal.1.1.1":"2022-09-09T21:38:58.748Z","2.0.0-internal.1.2.0.93071":"2022-09-14T20:49:20.976Z","1.2.6-93452":"2022-09-15T20:54:55.520Z","0.59.2004":"2022-09-15T22:24:27.305Z","2.0.0-internal.1.1.2":"2022-09-16T00:14:37.849Z","2.0.0-internal.1.0.1":"2022-09-22T23:37:49.473Z","1.2.6":"2022-09-23T18:02:41.830Z","2.0.0-internal.1.1.3":"2022-09-23T21:51:06.191Z","2.0.0-internal.1.2.0":"2022-09-26T20:12:06.037Z","1.2.7":"2022-09-27T23:40:39.981Z","0.59.4003":"2022-09-28T00:18:09.398Z","2.0.0-internal.1.1.4":"2022-09-28T00:26:59.816Z","2.0.0-dev.1.3.0.96595":"2022-09-30T20:01:48.304Z","2.0.0-internal.1.2.1":"2022-10-03T23:48:13.098Z","1.3.0-97515":"2022-10-04T23:14:31.545Z","2.0.0-internal.1.2.2":"2022-10-05T00:58:40.679Z","2.0.0-internal.1.4.0":"2022-10-06T23:13:52.631Z","2.0.0-internal.1.4.1":"2022-10-10T21:13:10.381Z","2.0.0-internal.1.4.2":"2022-10-13T00:00:27.878Z","1.3.0-100520":"2022-10-14T18:33:43.086Z","2.0.0-internal.2.0.0":"2022-10-18T02:52:39.337Z","2.0.0-internal.1.4.3":"2022-10-18T22:38:59.643Z","1.3.0":"2022-10-19T16:06:54.448Z","2.0.0-internal.1.4.4":"2022-10-20T06:41:51.232Z","2.0.0-internal.2.0.1":"2022-10-20T19:15:36.555Z","2.0.0-dev.1.4.5.105745":"2022-11-02T19:48:11.098Z","2.0.0-internal.1.4.5":"2022-11-03T19:22:47.709Z","2.0.0-dev.1.4.6.106135":"2022-11-03T21:54:47.701Z","2.0.0-internal.1.4.6":"2022-11-03T22:38:16.263Z","1.4.0-106438":"2022-11-04T22:03:19.402Z","2.0.0-internal.2.0.2":"2022-11-04T22:58:16.631Z","2.0.0-internal.2.0.3":"2022-11-10T18:47:39.266Z","1.4.0-108057":"2022-11-11T04:35:52.663Z","1.3.1":"2022-11-11T20:36:18.325Z","2.0.0-internal.2.1.0":"2022-11-14T19:12:58.883Z","2.0.0-internal.1.4.7":"2022-11-21T19:47:23.475Z","2.0.0-internal.2.0.4":"2022-11-21T23:02:29.078Z","2.0.0-internal.2.1.1":"2022-11-21T23:05:02.740Z","2.0.0-dev.2.2.0.111723":"2022-11-28T15:28:57.473Z","1.4.0-111997":"2022-11-29T15:13:12.350Z","2.0.0-internal.1.4.8":"2022-12-02T00:28:43.149Z","2.0.0-internal.2.1.2":"2022-12-02T00:34:56.255Z","1.3.2-112998":"2022-12-02T01:07:53.366Z","2.0.0-internal.2.2.0":"2022-12-09T19:42:45.889Z","2.0.0-dev.2.3.0.115467":"2022-12-13T23:14:52.909Z","1.4.0-115997":"2022-12-15T18:31:51.208Z","2.0.0-internal.2.2.1":"2023-01-07T01:21:13.722Z","1.3.3":"2023-01-12T19:20:59.383Z","2.0.0-internal.2.3.0":"2023-01-18T01:40:46.755Z","1.4.0-121020":"2023-01-18T01:43:05.678Z","1.3.4":"2023-01-18T19:22:01.324Z","1.3.5-121405":"2023-01-19T00:16:13.401Z","2.0.0-internal.1.4.9":"2023-01-19T00:17:54.390Z","2.0.0-internal.2.3.1":"2023-01-20T20:24:19.046Z","2.0.0-internal.2.4.0":"2023-01-25T22:18:17.124Z","2.0.0-internal.3.0.0":"2023-01-28T02:04:36.376Z","2.0.0-dev.3.1.0.125672":"2023-01-31T16:29:12.295Z","2.0.0-internal.3.0.1":"2023-02-03T23:59:29.455Z","2.0.0-internal.3.1.0":"2023-02-10T07:06:39.145Z","1.2.8":"2023-02-10T18:41:18.813Z","1.3.5":"2023-02-10T18:47:08.586Z","2.0.0-internal.3.0.2":"2023-02-14T17:46:31.492Z","2.0.0-internal.2.4.1":"2023-02-23T23:16:50.153Z","2.0.0-internal.3.2.0":"2023-02-24T02:56:58.286Z","2.0.0-internal.3.2.1":"2023-02-27T21:59:20.377Z","2.0.0-internal.3.0.3":"2023-02-27T23:53:41.701Z","2.0.0-internal.3.2.2":"2023-03-01T00:02:41.438Z","1.3.6":"2023-03-08T20:42:11.258Z","2.0.0-internal.3.0.4":"2023-03-10T00:59:14.885Z","2.0.0-internal.3.3.0":"2023-03-10T20:29:56.006Z","2.0.0-internal.2.4.2":"2023-03-10T23:02:58.966Z","2.0.0-internal.2.4.3":"2023-03-16T20:06:33.537Z","2.0.0-internal.3.3.1":"2023-03-16T23:37:16.258Z","2.0.0-internal.3.3.2":"2023-03-21T01:01:50.060Z","2.0.0-internal.3.4.0":"2023-03-22T22:07:39.028Z","2.0.0-internal.3.4.1":"2023-03-24T21:52:04.080Z","2.0.0-internal.4.0.0":"2023-03-24T22:23:21.817Z","2.0.0-internal.3.0.5":"2023-03-24T23:46:37.396Z","2.0.0-internal.3.2.3":"2023-03-27T18:51:43.319Z","2.0.0-internal.3.3.3":"2023-03-27T19:06:15.784Z","2.0.0-internal.3.4.2":"2023-03-27T19:09:13.593Z","2.0.0-internal.4.0.1":"2023-03-27T21:29:36.845Z","2.0.0-internal.3.1.1":"2023-03-29T01:41:15.724Z","2.0.0-internal.4.0.2":"2023-04-01T00:59:45.850Z","2.0.0-internal.3.0.6":"2023-04-01T01:42:03.470Z","2.0.0-internal.3.4.3":"2023-04-01T03:02:29.795Z","2.0.0-internal.3.4.4":"2023-04-04T20:47:59.288Z","2.0.0-internal.4.0.3":"2023-04-04T22:47:02.050Z","2.0.0-dev.4.1.0.148229":"2023-04-06T22:29:32.133Z","2.0.0-internal.4.0.4":"2023-04-07T17:23:47.265Z","2.0.0-internal.4.0.5":"2023-04-07T21:52:47.926Z","2.0.0-internal.4.0.6":"2023-04-21T02:14:46.765Z","2.0.0-internal.4.1.0":"2023-04-22T00:29:49.161Z","2.0.0-dev.4.2.0.153917":"2023-04-25T19:59:01.369Z","2.0.0-internal.4.1.1":"2023-04-27T17:33:34.892Z","2.0.0-internal.4.1.2":"2023-05-01T18:47:05.772Z","2.0.0-internal.3.4.5":"2023-05-04T20:21:26.597Z","2.0.0-internal.4.2.0":"2023-05-05T23:30:55.564Z","2.0.0-dev.4.3.0.157531":"2023-05-08T20:50:44.593Z","2.0.0-dev.4.3.0.158678":"2023-05-10T16:42:55.631Z","2.0.0-dev.4.3.0.159619":"2023-05-11T20:38:46.900Z","2.0.0-internal.4.2.1":"2023-05-11T21:20:22.386Z","2.0.0-internal.4.3.0":"2023-05-18T18:43:13.957Z","2.0.0-dev.4.4.0.161322":"2023-05-18T19:04:51.692Z","2.0.0-dev.4.4.0.161516":"2023-05-19T01:31:29.734Z","2.0.0-dev.4.4.0.161652":"2023-05-19T19:58:05.891Z","2.0.0-dev.4.4.0.161784":"2023-05-20T00:53:55.650Z","2.0.0-dev.4.4.0.162089":"2023-05-23T17:06:50.482Z","2.0.0-dev.4.4.0.162253":"2023-05-24T07:16:28.957Z","2.0.0-dev.4.4.0.162574":"2023-05-25T18:19:56.132Z","2.0.0-internal.4.4.0":"2023-06-05T17:43:58.626Z","2.0.0-internal.5.0.0":"2023-06-06T00:40:25.214Z","2.0.0-internal.4.3.1":"2023-06-13T04:05:48.828Z","2.0.0-internal.4.4.1":"2023-06-14T20:08:20.141Z","2.0.0-internal.5.0.1":"2023-06-14T21:17:33.389Z","2.0.0-dev.5.2.0.169897":"2023-06-21T15:46:17.154Z","2.0.0-internal.5.1.0":"2023-06-21T18:22:24.973Z","2.0.0-internal.5.1.1":"2023-06-29T23:20:49.980Z","2.0.0-internal.5.2.0":"2023-07-05T19:12:16.908Z","2.0.0-internal.5.3.0":"2023-07-15T00:55:40.002Z","2.0.0-internal.4.4.2":"2023-07-21T21:10:29.456Z","2.0.0-internal.5.3.1":"2023-07-24T18:38:18.411Z","2.0.0-dev.5.3.2.178189":"2023-07-25T18:34:55.135Z","2.0.0-internal.4.4.3":"2023-07-27T19:34:37.493Z","2.0.0-internal.5.3.2":"2023-07-27T21:05:38.102Z","2.0.0-internal.4.4.4":"2023-08-03T21:27:04.116Z","2.0.0-internal.5.4.0":"2023-08-03T21:31:38.904Z","2.0.0-internal.5.3.4":"2023-08-07T20:23:43.703Z","2.0.0-internal.5.4.2":"2023-08-20T15:52:37.040Z","1.3.7":"2023-08-31T17:47:27.020Z","2.0.0-internal.4.3.2":"2023-09-11T20:56:28.623Z","1.4.0":"2024-04-09T21:14:56.659Z"},"bugs":{"url":"https://github.com/microsoft/FluidFramework/issues"},"author":{"name":"Microsoft and contributors"},"license":"MIT","homepage":"https://fluidframework.com","repository":{"url":"git+https://github.com/microsoft/FluidFramework.git","type":"git","directory":"packages/framework/test-client-utils"},"description":"Fluid client development and test utilities","maintainers":[{"email":"ffsa@microsoft.com","name":"ms-fluid-bot"},{"email":"microsoft-oss-publishing@microsoft.com","name":"microsoft-oss-releases"},{"email":"npmjs@microsoft.com","name":"microsoft1es"}],"readme":"# @fluidframework/test-client-utils\n\nUtilities to use while developing and testing using the service-specific clients (i.e. `AzureClient`, `TinyliciousClient`) supplied by the FluidFramework.\n\n## InsecureTokenProvider\n\nThe `InsecureTokenProvider` provides a class for locally generating JWT tokens, signed using a tenant key, that can be sent to Fluid services. These tokens will be used to authenticate and identify which user is sending operations from the client.\n\nIt takes in two parameters:\n- `tenantKey` - Used for signing the token for use with the `tenantId` that we are attempting to connect to on the service\n- `user` - Used to populate the current user's details in the audience currently editing the container\n\nThe `AzureClient`, from the `@fluidframework/azure-client` package, takes in a `tokenProvider` parameter as part of its constructor. This parameter can be fulfilled by using the `InsecureTokenProvider` that is exported here. However, it is advised to only use this for development or testing purposes as it risks exposing your Azure Fluid Relay service tenant key secret on your client side code.\n\n### Usage for Development with Local Tinylicious Instance\n\nWhen using the `AzureClient`, you can configure it to run against a local Tinylicous instance. Please see the client's [documentation on local development](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-locally) for more information on how to do so. In this scenario, the `InsecureTokenProvider` will take any value for its `tenantKey` parameter since we're working with a local Tinylicious instance that doesn't require any authentication. As such, we can create an instance of it like this:\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"fooBar\", { id: \"123\", name: \"Test User\" });\n```\n\n### Usage for Development with Azure Fluid Relay service\n\nThe `AzureClient` can also be configured to a deployed Azure Fluid Relay service instance as described [here](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/README.md#backed-by-a-live-azure-fluid-relay-instance). Now, the configuration is using a real `tenantId` and the `InsecureTokenProvider` will need the matching `tenantKey` as provided during the service onboarding.\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", { id: \"123\", name: \"Test User\" });\n```\n\nAgain, this should ONLY be used for local development as including the tenant key in the client code risks allowing malicious users to sniff it from the client bundle. Please consider using the [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/packages/framework/azure-client/src/AzureFunctionTokenProvider.ts) or your own implementation that fulfills the `ITokenProvider` interface as an alternative for production scenarios.\n\n## generateTestUser\n\nA simple function that will generate a test user. This is to be used in conjuntion with `InsecureTokenProvider`. The response object will be `{ id: string, name: string}`. `id` will be a uuid and `name` will be a randomly generated friendly first and last name  seperated by a space.\n\n### Usage\n\n```javascript\nconst tokenProvider = new InsecureTokenProvider(\"YOUR-TENANT-KEY-HERE\", generateTestUser());\n```","readmeFilename":"README.md"}