From 99af42e3aaefd289aca8f67a5d62eb3c4356306b Mon Sep 17 00:00:00 2001
From: nageshy
Date: Fri, 25 Jul 2025 15:40:37 +0530
Subject: [PATCH 01/12] initial update
---
callautomation-lobbycall-sample/.gitignore | 30 ++
callautomation-lobbycall-sample/README.md | 55 +++
callautomation-lobbycall-sample/package.json | 29 ++
callautomation-lobbycall-sample/src/app.ts | 447 ++++++++++++++++++
.../src/webpage/index.html | 164 +++++++
callautomation-lobbycall-sample/tsconfig.json | 13 +
6 files changed, 738 insertions(+)
create mode 100644 callautomation-lobbycall-sample/.gitignore
create mode 100644 callautomation-lobbycall-sample/README.md
create mode 100644 callautomation-lobbycall-sample/package.json
create mode 100644 callautomation-lobbycall-sample/src/app.ts
create mode 100644 callautomation-lobbycall-sample/src/webpage/index.html
create mode 100644 callautomation-lobbycall-sample/tsconfig.json
diff --git a/callautomation-lobbycall-sample/.gitignore b/callautomation-lobbycall-sample/.gitignore
new file mode 100644
index 00000000..1f45ab17
--- /dev/null
+++ b/callautomation-lobbycall-sample/.gitignore
@@ -0,0 +1,30 @@
+# Ignore node_modules directory
+node_modules/
+
+# Ignore environment variables file
+.env
+
+# Ignore build output directory
+dist/
+build/
+public/assets/
+
+# Ignore IDE/Editor-specific files
+.vscode/
+.vs
+.idea/
+
+# Ignore user-specific configuration files
+.npmrc
+.gitconfig
+
+# Ignore log files
+*.log
+
+# Ignore OS-generated files
+.DS_Store
+Thumbs.db
+
+# Ignore package lock files
+package-lock.json
+yarn.lock
\ No newline at end of file
diff --git a/callautomation-lobbycall-sample/README.md b/callautomation-lobbycall-sample/README.md
new file mode 100644
index 00000000..13082a3d
--- /dev/null
+++ b/callautomation-lobbycall-sample/README.md
@@ -0,0 +1,55 @@
+
+|page_type|languages|products
+|---|---|---|
+|sample||azure azure-communication-services
|
+
+# Lobbay Call Sample using Call Automation SDK
+
+In this quickstart sample, we cover how you can use the Call Automation SDK to perform lobby calls using Azure Communication Services (ACS) calls. This involves creating and managing several outgoing calls simultaneously and dynamically moving participants between these active calls.
+
+## Prerequisites
+
+- Create an Azure account with an active subscription. For details, see [Create an account for free](https://azure.microsoft.com/free/)
+- [Visual Studio Code](https://code.visualstudio.com/download) installed
+- [Node.js](https://nodejs.org/en/download) installed
+- Create an Azure Communication Services resource. For details, see [Create an Azure Communication Resource](https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource). You will need to record your resource **connection string** for this sample.
+- Get a phone number for your new Azure Communication Services resource. For details, see [Get a phone number](https://learn.microsoft.com/azure/communication-services/quickstarts/telephony/get-phone-number?tabs=windows&pivots=programming-language-csharp)
+
+## Before running the sample for the first time
+
+1. Open an instance of PowerShell, Windows Terminal, Command Prompt or equivalent and navigate to the directory that you would like to clone the sample to.
+2. git clone `https://github.com/Azure-Samples/communication-services-javascript-quickstarts.git`.
+3. cd into the `callautomation-lobbycall-sample` folder.
+4. From the root of the above folder, and with node installed, run `npm install`
+
+### Setup and host your Azure DevTunnel
+
+[Azure DevTunnels](https://learn.microsoft.com/en-us/azure/developer/dev-tunnels/get-started?tabs=windows) is an Azure service that enables you to share local web services hosted on the internet. Use the commands below to connect your local development environment to the public internet. This creates a tunnel with a persistent endpoint URL and which allows anonymous access. We will then use this endpoint to notify your application of calling events from the ACS Call Automation service.
+
+```bash
+devtunnel create --allow-anonymous
+devtunnel port create -p 8080
+devtunnel host
+```
+
+### Configuring application
+
+Create/Open the `.env` file to configure the following settings
+
+1. `PORT`: Assign constant 8080
+2. `CONNECTION_STRING`: Azure Communication Service resource's connection string.
+3. `ACS_INBOUND_PHONE_NUMBER`: Inbound Phone number associated with the Azure Communication Service resource. For e.g. "+1425XXXAAAA"
+4. `ACS_OUTBOUND_PHONE_NUMBER`: Outbound Phone number associated with the Azure Communication Service resource. For e.g. "+1425XXXAAAA"
+5. `USER_PHONE_NUMBER`: User phone number to add in the call. For e.g. "+1425XXXAAAA"
+6. `ACS_TEST_IDENTITY_2`: An ACS Communication Identifier to add in the call.
+7. `ACS_TEST_IDENTITY_3`: Another ACS Communication Identifier to add in the call.
+8. `CALLBACK_URI`: Base url of the app. (For local development replace the dev tunnel url)
+9. `COGNITIVE_SERVICES_ENDPOINT` : Cognitive service endpoint.
+
+### Run app locally
+
+1. Open a new Powershell window, cd into the `callautomation-lobbycall-sample` folder and run `npm run dev`
+2. Browser should pop up with the below page. If not navigate it to `http://localhost:8080/`
+3. Follow the steps.
+
+
diff --git a/callautomation-lobbycall-sample/package.json b/callautomation-lobbycall-sample/package.json
new file mode 100644
index 00000000..57a994cf
--- /dev/null
+++ b/callautomation-lobbycall-sample/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "callautomation_lobbycall",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "build": "tsc",
+ "dev": "nodemon ./src/app.ts"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@azure/communication-call-automation": "^1.5.0",
+ "@azure/communication-common": "^2.2.0",
+ "@azure/communication-identity": "^1.3.1",
+ "@azure/communication-rooms": "^1.1.1",
+ "@azure/eventgrid": "^4.12.0",
+ "@types/express": "^4.17.17",
+ "@types/node": "^20.2.1",
+ "dotenv": "^16.0.3",
+ "express": "^4.18.2"
+ },
+ "devDependencies": {
+ "nodemon": "^2.0.22",
+ "ts-node": "^10.9.1",
+ "typescript": "^5.0.4"
+ }
+}
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
new file mode 100644
index 00000000..679efc58
--- /dev/null
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -0,0 +1,447 @@
+import { config } from 'dotenv';
+import express, { Application } from 'express';
+import { CommunicationUserIdentifier, PhoneNumberIdentifier } from "@azure/communication-common";
+import {
+ CallAutomationClient,
+ CallInvite,
+ AnswerCallOptions,
+ MoveParticipantsOptions
+} from "@azure/communication-call-automation";
+
+config();
+
+const PORT = process.env.PORT;
+const app: Application = express();
+app.use(express.static('webpage'));
+app.use(express.urlencoded({ extended: true }));
+app.use(express.json());
+
+let callConnectionId1: string;
+let callConnectionId2: string;
+let callConnectionId3: string;
+let acsInboundPhoneNumber: string;
+let acsOutboundPhoneNumber: string;
+let userPhoneNumber: string;
+let acsTestIdentity2: string;
+let acsTestIdentity3: string;
+let acsClient: CallAutomationClient;
+let lastWorkflowCallType: string;
+let callerId1: string;
+let callerId2: string;
+let callerId3: string;
+let calleeId1: string;
+let calleeId2: string;
+let calleeId3: string;
+const callbackUriHost = process.env.CALLBACK_URI || "";
+const connectionString = process.env.CONNECTION_STRING || ""
+const endpoint = process.env.PMA_ENDPOINT || ""
+
+async function createAcsClient() {
+ callConnectionId1 = "";
+ callConnectionId2 = "";
+ callConnectionId3 = "";
+ acsInboundPhoneNumber = process.env.ACS_INBOUND_PHONE_NUMBER || "";
+ acsOutboundPhoneNumber = process.env.ACS_OUTBOUND_PHONE_NUMBER || "";
+ userPhoneNumber = process.env.USER_PHONE_NUMBER || "";
+ acsTestIdentity2 = process.env.ACS_TEST_IDENTITY_2 || "";
+ acsTestIdentity3 = process.env.ACS_TEST_IDENTITY_3 || "";
+ lastWorkflowCallType = "";
+ callerId1 = "";
+ callerId2 = "";
+ callerId3 = "";
+ calleeId1 = "";
+ calleeId2 = "";
+ calleeId3 = "";
+ // acsClient = new CallAutomationClient(endpoint, connectionString);
+ acsClient = new CallAutomationClient(connectionString);
+ console.log("Initialized ACS Client.");
+}
+
+app.get('/userCallToCallAutomation', async (req, res) => {
+ console.log("--------- UserCallToCallAutomation - Call 1 API Endpoint -------------------");
+ try {
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const callee : PhoneNumberIdentifier = {
+ phoneNumber: acsInboundPhoneNumber
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee,
+ sourceCallIdNumber: {
+ phoneNumber: userPhoneNumber,
+ },
+ };
+ const options = {
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ },
+ operationContext: 'CallOne'
+ };
+ var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
+ callConnectionId1 = createCallResult.callConnectionProperties.callConnectionId;
+ callerId1 = userPhoneNumber;
+ calleeId1 = acsInboundPhoneNumber;
+
+ console.log("=== Call From User to Call Automation ===");
+ console.log(`Created call from ${userPhoneNumber} to ${acsOutboundPhoneNumber}`);
+ console.log(`Connection ID: ${callConnectionId1}`);
+ console.log("=== END WORKFLOW INITIATION ===");
+ } catch (err) {
+ console.error('Error creating call:', err);
+ }
+ res.redirect('/');
+});
+
+app.get('/createCall2', async (req, res) => {
+ console.log('--------- createCall2 - Call 2 API Endpoint " -------------------');
+ try {
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const callee : PhoneNumberIdentifier = {
+ phoneNumber: acsOutboundPhoneNumber
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee,
+ sourceCallIdNumber: {
+ phoneNumber: acsInboundPhoneNumber,
+ },
+ };
+ const options = {
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ },
+ operationContext: 'CallTwo'
+ };
+ var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
+ callConnectionId2 = createCallResult.callConnectionProperties.callConnectionId;
+ // Track this as Call 2
+ lastWorkflowCallType = "CallTwo";
+ callerId2 = acsInboundPhoneNumber;
+ calleeId2 = acsOutboundPhoneNumber;
+
+ console.log('=== CALL TWO WORKFLOW INITIATED ===');
+ console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
+ console.log(`Connection ID: ${callConnectionId2}`);
+ console.log(`This call should trigger MoveParticipantEvent (Scenario 2) which will redirect to ACS user ${acsTestIdentity2}`);
+ console.log('Operation Context: CallTwo');
+ console.log('=== END WORKFLOW INITIATION ===');
+ } catch (err) {
+ console.error('Error creating call:', err);
+ }
+ res.redirect('/');
+});
+
+app.get('/createCall3', async (req, res) => {
+ console.log('--------- createCall3 - Call 3 API Endpoint " -------------------');
+ try {
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const callee : PhoneNumberIdentifier = {
+ phoneNumber: acsOutboundPhoneNumber
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee,
+ sourceCallIdNumber: {
+ phoneNumber: acsInboundPhoneNumber,
+ },
+ };
+ const options = {
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ },
+ operationContext: 'CallThree'
+ };
+ var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
+ callConnectionId3 = createCallResult.callConnectionProperties.callConnectionId;
+ // Track this as Call 2
+ lastWorkflowCallType = "CallThree";
+ callerId3 = acsInboundPhoneNumber;
+ calleeId3 = acsOutboundPhoneNumber;
+
+ console.log('=== CALL THREE WORKFLOW INITIATED ===');
+ console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
+ console.log(`Connection ID: ${callConnectionId3}`);
+ console.log(`This call should trigger MoveParticipantEvent (Scenario 3) which will redirect to ACS user ${acsTestIdentity3}`);
+ console.log('Operation Context: CallThree');
+ console.log('=== END WORKFLOW INITIATION ===');
+ } catch (err) {
+ console.error('Error creating call:', err);
+ }
+ res.redirect('/');
+});
+
+app.get('/moveParticipant2', async (req, res) => {
+ console.log('--------- MoveParticipant API End Point -------------------');
+
+ try {
+ const request = req.body;
+ console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
+ console.log(`Source Connection ID: ${callConnectionId2}`);
+ console.log(`Target Connection ID: ${callConnectionId1}`);
+ console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
+
+ // Get the target connection (where we want to move participants to)
+ const targetConnection = acsClient.getCallConnection(callConnectionId1);
+
+ // Get participants from source connection for reference (optional)
+ const sourceConnection = acsClient.getCallConnection(callConnectionId2);
+
+ // Create participant identifier based on the input
+ let participantToMove;
+ if (acsOutboundPhoneNumber.startsWith('+')) {
+ // Phone number
+ participantToMove = { phoneNumber: acsOutboundPhoneNumber };
+ console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
+ } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
+ // ACS Communication User
+ participantToMove = { communicationUserId: acsOutboundPhoneNumber };
+ console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
+ } else {
+ console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
+ }
+
+ // Prepare move participants options
+ const options : MoveParticipantsOptions = {
+ operationContext: "MoveParticipant2"
+ };
+
+ // Call the ACS SDK to move participants
+ await targetConnection.moveParticipants([participantToMove], callConnectionId2, options);
+ callConnectionId2 = "";
+ callerId2 = "";
+ calleeId2 = "";
+ calleeId1 = acsTestIdentity2;
+
+ // For demonstration, assume success
+ console.log('Move Participants operation completed successfully');
+ console.log(`Moved ${acsTestIdentity2} from ${callConnectionId2} to ${callConnectionId1}`);
+ console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
+ } catch (err) {
+ console.error(`Error in manual move participant operation: ${err.message}`);
+ }
+ res.redirect('/');
+});
+
+app.get('/moveParticipant3', async (req, res) => {
+ console.log('--------- MoveParticipant API End Point -------------------');
+
+ try {
+ const request = req.body;
+ console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
+ console.log(`Source Connection ID: ${callConnectionId3}`);
+ console.log(`Target Connection ID: ${callConnectionId1}`);
+ console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
+
+ // Get the target connection (where we want to move participants to)
+ const targetConnection = acsClient.getCallConnection(callConnectionId1);
+
+ // Get participants from source connection for reference (optional)
+ const sourceConnection = acsClient.getCallConnection(callConnectionId3);
+
+ // Create participant identifier based on the input
+ let participantToMove;
+ if (acsOutboundPhoneNumber.startsWith('+')) {
+ // Phone number
+ participantToMove = { phoneNumber: acsOutboundPhoneNumber };
+ console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
+ } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
+ // ACS Communication User
+ participantToMove = { communicationUserId: acsOutboundPhoneNumber };
+ console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
+ } else {
+ console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
+ }
+
+ // Prepare move participants options
+ const options : MoveParticipantsOptions = {
+ operationContext: "MoveParticipant3"
+ };
+
+ // Call the ACS SDK to move participants
+ await targetConnection.moveParticipants([participantToMove], callConnectionId3, options);
+ callConnectionId3 = "";
+ callerId3 = "";
+ calleeId3 = "";
+ calleeId1 = acsTestIdentity3;
+
+ // For demonstration, assume success
+ console.log('Move Participants operation completed successfully');
+ console.log(`Moved ${acsTestIdentity3} from ${callConnectionId3} to ${callConnectionId1}`);
+ console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
+ } catch (err) {
+ console.error(`Error in manual move participant operation: ${err.message}`);
+ }
+ res.redirect('/');
+});
+
+app.get('/terminateCalls', async (req, res) => {
+ console.log(`calls 1: ${callConnectionId1}, 2: ${callConnectionId2}, 3: ${callConnectionId3}`);
+ if (callConnectionId1) {
+ try {
+ console.log(`Terminating Call 1 with ID: ${callConnectionId1}`);
+ const callConnection1 = acsClient.getCallConnection(callConnectionId1);
+ await callConnection1.hangUp(true);
+ } catch (error) {
+ console.error(`Error terminating Call 1: ${error.message}`);
+ }
+ }
+ if (callConnectionId2) {
+ try {
+ console.log(`Terminating Call 2 with ID: ${callConnectionId2}`);
+ const callConnection2 = acsClient.getCallConnection(callConnectionId2);
+ await callConnection2.hangUp(true);
+ } catch (error) {
+ console.error(`Error terminating Call 2: ${error.message}`);
+ }
+ }
+ if (callConnectionId3) {
+ try {
+ console.log(`Terminating Call 3 with ID: ${callConnectionId3}`);
+ const callConnection3 = acsClient.getCallConnection(callConnectionId3);
+ await callConnection3.hangUp(true);
+ } catch (error) {
+ console.error(`Error terminating Call 3: ${error.message}`);
+ }
+ }
+ console.log("Calls hung up successfully.");
+ callConnectionId1 = "";
+ callConnectionId2 = "";
+ callConnectionId3 = "";
+ callerId1 = "";
+ callerId2 = "";
+ callerId3 = "";
+ calleeId1 = "";
+ calleeId2 = "";
+ calleeId3 = "";
+ res.redirect('/');
+});
+
+app.post('/api/moveParticipantEvent', async (req, res) => {
+ console.log('--------- /api/moveParticipantEvent -------------------');
+ const event = req.body[0];
+ const eventData = event.data;
+ if (event.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") {
+ console.log("SubscriptionValidation event");
+ res.status(200).json({
+ validationResponse: eventData.validationCode,
+ });
+ return;
+ }
+
+ // ACS Incoming Call event
+ if (event.eventType === 'Microsoft.Communication.IncomingCall') {
+ const fromCallerId = eventData.from.rawId;
+ const toCallerId = eventData.to.rawId;
+
+ console.log(`From Caller Id: ${fromCallerId}`);
+ console.log(`To Caller Id : ${toCallerId}`);
+
+ // Scenario 1: User calls from their phone number to ACS inbound number
+ if (fromCallerId.includes(userPhoneNumber)) {
+ console.log('=== SCENARIO 1: USER INCOMING CALL ===');
+
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const options : AnswerCallOptions = {
+ operationContext: "CallOne"
+ };
+
+ //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
+ var answerCallResult = await acsClient.answerCall(eventData.incomingCallContext, callbackUri, options);
+ callConnectionId1 = answerCallResult.callConnectionProperties.callConnectionId;
+
+ console.log(`User Call Answered - CallConnectionId: ${callConnectionId1}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+ console.log('Operation Context: CallOne');
+ console.log('=== END SCENARIO 1 ===');
+ }
+ // Scenario 2: ACS inbound number calls ACS outbound number (workflow triggered)
+ else if (fromCallerId.includes(acsInboundPhoneNumber)) {
+ console.log('=== SCENARIO 2: WORKFLOW CALL TO BE REDIRECTED ===');
+ console.log(`Last Workflow Call Type: ${lastWorkflowCallType}`);
+
+ // Check which type of workflow call this is and redirect accordingly
+ let redirectTarget;
+ if (lastWorkflowCallType === 'CallTwo') {
+ // Redirect the call to ACS User Identity 2
+ redirectTarget = acsTestIdentity2;
+ const callee : CommunicationUserIdentifier = {
+ communicationUserId: redirectTarget
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee
+ };
+ //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
+ var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
+ console.log('PROCESSING CALL TWO - Redirecting to ACS User Identity 2');
+ } else if (lastWorkflowCallType === 'CallThree') {
+ // Redirect the call to ACS User Identity 3
+ redirectTarget = acsTestIdentity3;
+ const callee : CommunicationUserIdentifier = {
+ communicationUserId: redirectTarget
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee
+ };
+ //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
+ var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
+ console.log('PROCESSING CALL THREE - Redirecting to ACS User Identity 3');
+ }
+ console.log('=== END SCENARIO 2 ===');
+ }
+ }
+ res.status(200).send();
+});
+
+app.post('/api/callbacks', async (req, res) => {
+ console.log('--------- /api/callbacks -------------------');
+ const event = req.body[0];
+ const eventData = event.data;
+ // For demonstration, log the event type and IDs
+ console.log(`Received call event: ${event.type}`);
+ console.log(`Correlation id:-> ${eventData.correlationId}`)
+ if (event.type === "Microsoft.Communication.CallConnected") {
+ console.log('\n--------- CallConnected Event Block -------------------');
+ switch (eventData.operationContext) {
+ case 'CallOne':
+ //callConnectionId1 = callConnectionId;
+ console.log('=== CALL ONE CONNECTED ===');
+ console.log('User call connected');
+ console.log('=== END CALL ONE CONNECTED ===');
+ break;
+ case 'CallTwo':
+ //callConnectionId2 = callConnectionId;
+ calleeId2 = acsTestIdentity2;
+ console.log('=== CALL TWO CONNECTED ===');
+ console.log('User call connected');
+ console.log('=== END CALL TWO CONNECTED ===');
+ break;
+ case 'CallThree':
+ //callConnectionId3 = callConnectionId;
+ calleeId3 = acsTestIdentity3;
+ console.log('=== CALL THREE CONNECTED ===');
+ console.log('User call connected');
+ console.log('=== END CALL THREE CONNECTED ===');
+ break;
+ }
+ } else if (event.type === 'Microsoft.Communication.CallDisconnected') {
+ console.log(`Call disconnected: ${eventData.callConnectionId}`);
+ } else {
+ // Log other events but don't process them for Move Participants scenario
+ console.log(`Received event: ${event.type} - No action needed for Move Participants scenario`);
+ }
+ res.status(200).send();
+});
+
+app.get('/call-data', (req, res) => {
+ console.log("Call Data Endpoint Hit");
+ console.log(`call 1: ${callConnectionId1}, call 2: ${callConnectionId2}, call 3: ${callConnectionId3}`);
+ res.json({ callConnectionId1, callConnectionId2, callConnectionId3, callerId1, callerId2, callerId3, calleeId1, calleeId2, calleeId3 });
+});
+
+// GET endpoint to serve the webpage
+app.get('/', (req, res) => {
+ res.sendFile('index.html', { root: 'src/webpage' });
+});
+
+// Start the server
+app.listen(PORT, async () => {
+ console.log(`Server is listening on port ${PORT}`);
+ await createAcsClient();
+});
diff --git a/callautomation-lobbycall-sample/src/webpage/index.html b/callautomation-lobbycall-sample/src/webpage/index.html
new file mode 100644
index 00000000..30f53350
--- /dev/null
+++ b/callautomation-lobbycall-sample/src/webpage/index.html
@@ -0,0 +1,164 @@
+
+
+
+
+ Azure Communication Services Quickstart
+
+
+
+
+ Lobby Call Sample
+
+
+
+
+
\ No newline at end of file
diff --git a/callautomation-lobbycall-sample/tsconfig.json b/callautomation-lobbycall-sample/tsconfig.json
new file mode 100644
index 00000000..c67252ac
--- /dev/null
+++ b/callautomation-lobbycall-sample/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "target": "ES2015",
+ "module": "commonjs",
+ "outDir": "./dist",
+ "rootDir": "./src",
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
From 1a4c75901cb9234148bd609053a8dcdeb7ce19eb Mon Sep 17 00:00:00 2001
From: nageshy
Date: Sat, 26 Jul 2025 11:01:24 +0530
Subject: [PATCH 02/12] initial update
---
callautomation-lobbycall-sample/README.md | 14 +-
callautomation-lobbycall-sample/src/app.ts | 578 +++++++++------------
2 files changed, 248 insertions(+), 344 deletions(-)
diff --git a/callautomation-lobbycall-sample/README.md b/callautomation-lobbycall-sample/README.md
index 13082a3d..22595677 100644
--- a/callautomation-lobbycall-sample/README.md
+++ b/callautomation-lobbycall-sample/README.md
@@ -38,18 +38,14 @@ Create/Open the `.env` file to configure the following settings
1. `PORT`: Assign constant 8080
2. `CONNECTION_STRING`: Azure Communication Service resource's connection string.
-3. `ACS_INBOUND_PHONE_NUMBER`: Inbound Phone number associated with the Azure Communication Service resource. For e.g. "+1425XXXAAAA"
-4. `ACS_OUTBOUND_PHONE_NUMBER`: Outbound Phone number associated with the Azure Communication Service resource. For e.g. "+1425XXXAAAA"
-5. `USER_PHONE_NUMBER`: User phone number to add in the call. For e.g. "+1425XXXAAAA"
-6. `ACS_TEST_IDENTITY_2`: An ACS Communication Identifier to add in the call.
-7. `ACS_TEST_IDENTITY_3`: Another ACS Communication Identifier to add in the call.
-8. `CALLBACK_URI`: Base url of the app. (For local development replace the dev tunnel url)
-9. `COGNITIVE_SERVICES_ENDPOINT` : Cognitive service endpoint.
+3. `COGNITIVE_SERVICES_ENDPOINT` : Cognitive service endpoint.
+4. `CALLBACK_URI`: Base url of the app. (For local development replace the dev tunnel url)
+5. `PMA_ENDPOINT`: PMA endpoint url
+6. `ACS_GENERATED_ID`: ACS Generated Id
+7. `SOCKET_TOKEN`: Web Socket Token Key
### Run app locally
1. Open a new Powershell window, cd into the `callautomation-lobbycall-sample` folder and run `npm run dev`
2. Browser should pop up with the below page. If not navigate it to `http://localhost:8080/`
3. Follow the steps.
-
-
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
index 679efc58..1200eba5 100644
--- a/callautomation-lobbycall-sample/src/app.ts
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -16,304 +16,222 @@ app.use(express.static('webpage'));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
-let callConnectionId1: string;
-let callConnectionId2: string;
-let callConnectionId3: string;
-let acsInboundPhoneNumber: string;
-let acsOutboundPhoneNumber: string;
-let userPhoneNumber: string;
-let acsTestIdentity2: string;
-let acsTestIdentity3: string;
+let lobbyCallConnectionId: string;
+let targetCallConnectionId: string;
+let acsGeneratedId: string;
let acsClient: CallAutomationClient;
-let lastWorkflowCallType: string;
-let callerId1: string;
-let callerId2: string;
-let callerId3: string;
-let calleeId1: string;
-let calleeId2: string;
-let calleeId3: string;
+let lobbyCallerId: string;
const callbackUriHost = process.env.CALLBACK_URI || "";
const connectionString = process.env.CONNECTION_STRING || ""
const endpoint = process.env.PMA_ENDPOINT || ""
+let webSocket = null;
async function createAcsClient() {
- callConnectionId1 = "";
- callConnectionId2 = "";
- callConnectionId3 = "";
- acsInboundPhoneNumber = process.env.ACS_INBOUND_PHONE_NUMBER || "";
- acsOutboundPhoneNumber = process.env.ACS_OUTBOUND_PHONE_NUMBER || "";
- userPhoneNumber = process.env.USER_PHONE_NUMBER || "";
- acsTestIdentity2 = process.env.ACS_TEST_IDENTITY_2 || "";
- acsTestIdentity3 = process.env.ACS_TEST_IDENTITY_3 || "";
- lastWorkflowCallType = "";
- callerId1 = "";
- callerId2 = "";
- callerId3 = "";
- calleeId1 = "";
- calleeId2 = "";
- calleeId3 = "";
+ lobbyCallConnectionId = "";
+ targetCallConnectionId = "";
+ acsGeneratedId = process.env.ACS_GENERATED_ID || "";
+ lobbyCallerId = "";
// acsClient = new CallAutomationClient(endpoint, connectionString);
acsClient = new CallAutomationClient(connectionString);
console.log("Initialized ACS Client.");
}
-app.get('/userCallToCallAutomation', async (req, res) => {
- console.log("--------- UserCallToCallAutomation - Call 1 API Endpoint -------------------");
- try {
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const callee : PhoneNumberIdentifier = {
- phoneNumber: acsInboundPhoneNumber
- };
- const callInvite : CallInvite = {
- targetParticipant: callee,
- sourceCallIdNumber: {
- phoneNumber: userPhoneNumber,
- },
- };
- const options = {
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- },
- operationContext: 'CallOne'
- };
- var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
- callConnectionId1 = createCallResult.callConnectionProperties.callConnectionId;
- callerId1 = userPhoneNumber;
- calleeId1 = acsInboundPhoneNumber;
-
- console.log("=== Call From User to Call Automation ===");
- console.log(`Created call from ${userPhoneNumber} to ${acsOutboundPhoneNumber}`);
- console.log(`Connection ID: ${callConnectionId1}`);
- console.log("=== END WORKFLOW INITIATION ===");
- } catch (err) {
- console.error('Error creating call:', err);
+const http = require('http');
+const WebSocket = require('ws');
+const server = http.createServer(app);
+
+// WebSocket server setup
+const wss = new WebSocket.Server({ noServer: true });
+
+server.on('upgrade', (request, socket, head) => {
+ // Only accept connections to the correct path
+ const url = request.url || '';
+ if (url === `/ws/${process.env.SOCKET_TOKEN}`) {
+ wss.handleUpgrade(request, socket, head, function done(ws) {
+ wss.emit('connection', ws, request);
+ });
+ } else {
+ socket.destroy();
}
- res.redirect('/');
});
-app.get('/createCall2', async (req, res) => {
- console.log('--------- createCall2 - Call 2 API Endpoint " -------------------');
- try {
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const callee : PhoneNumberIdentifier = {
- phoneNumber: acsOutboundPhoneNumber
- };
- const callInvite : CallInvite = {
- targetParticipant: callee,
- sourceCallIdNumber: {
- phoneNumber: acsInboundPhoneNumber,
- },
- };
- const options = {
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- },
- operationContext: 'CallTwo'
- };
- var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
- callConnectionId2 = createCallResult.callConnectionProperties.callConnectionId;
- // Track this as Call 2
- lastWorkflowCallType = "CallTwo";
- callerId2 = acsInboundPhoneNumber;
- calleeId2 = acsOutboundPhoneNumber;
-
- console.log('=== CALL TWO WORKFLOW INITIATED ===');
- console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
- console.log(`Connection ID: ${callConnectionId2}`);
- console.log(`This call should trigger MoveParticipantEvent (Scenario 2) which will redirect to ACS user ${acsTestIdentity2}`);
- console.log('Operation Context: CallTwo');
- console.log('=== END WORKFLOW INITIATION ===');
- } catch (err) {
- console.error('Error creating call:', err);
- }
- res.redirect('/');
-});
+wss.on('connection', (ws) => {
+ webSocket = ws;
+ console.log('Received WEB SOCKET request.');
+
+ ws.on('message', async (message) => {
+ const jsResponse = message.toString();
+ console.log(`Received from JS: ${jsResponse}`);
+
+ // Move participant to target call if response is "yes"
+ if (jsResponse.trim().toLowerCase() === 'yes') {
+ console.log('TODO: Move Participant');
+ try {
+ console.log(`
+ ~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~
+ Move Participant operation started..
+ Source Caller Id: ${lobbyCallerId}
+ Source Connection Id: ${lobbyCallConnectionId}
+ Target Connection Id: ${targetCallConnectionId}
+ `);
+
+ // Get the target connection
+ const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
+
+ // Get participants from source connection for reference
+ // const sourceConnection = client.getCallConnection(lobbyConnectionId);
+
+ // Create participant identifier based on the input
+ let participantToMove;
+ if (lobbyCallerId.startsWith('+')) {
+ // Phone number
+ participantToMove = new PhoneNumberIdentifier(lobbyCallerId);
+ } else {
+ // ACS Communication User
+ participantToMove = new CommunicationUserIdentifier(lobbyCallerId);
+ }
+
+ const response = await targetConnection.moveParticipants({
+ participantsToMove: [participantToMove],
+ sourceCallConnectionId: lobbyCallConnectionId
+ });
+ const rawResponse = response._response;
+ if (rawResponse.status >= 200 && rawResponse.status <= 299) {
+ console.log();
+ console.log('Move Participants operation completed successfully.');
+ } else {
+ throw new Error(`Move Participants operation failed with status code: ${rawResponse.status}`);
+ }
+ } catch (ex) {
+ console.log(`Error in manual move participants operation: ${ex.message}`);
+ }
+ }
+ });
-app.get('/createCall3', async (req, res) => {
- console.log('--------- createCall3 - Call 3 API Endpoint " -------------------');
- try {
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const callee : PhoneNumberIdentifier = {
- phoneNumber: acsOutboundPhoneNumber
- };
- const callInvite : CallInvite = {
- targetParticipant: callee,
- sourceCallIdNumber: {
- phoneNumber: acsInboundPhoneNumber,
- },
- };
- const options = {
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- },
- operationContext: 'CallThree'
- };
- var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
- callConnectionId3 = createCallResult.callConnectionProperties.callConnectionId;
- // Track this as Call 2
- lastWorkflowCallType = "CallThree";
- callerId3 = acsInboundPhoneNumber;
- calleeId3 = acsOutboundPhoneNumber;
-
- console.log('=== CALL THREE WORKFLOW INITIATED ===');
- console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
- console.log(`Connection ID: ${callConnectionId3}`);
- console.log(`This call should trigger MoveParticipantEvent (Scenario 3) which will redirect to ACS user ${acsTestIdentity3}`);
- console.log('Operation Context: CallThree');
- console.log('=== END WORKFLOW INITIATION ===');
- } catch (err) {
- console.error('Error creating call:', err);
- }
- res.redirect('/');
+ ws.on('close', () => {
+ webSocket = null;
+ });
});
-app.get('/moveParticipant2', async (req, res) => {
- console.log('--------- MoveParticipant API End Point -------------------');
+app.get('/TargetCallToAcsUser(Create)', async (req, res) => {
+ const acsTarget = req.body.acsTarget; // expects { "acsTarget": "" }
+ console.log('\n~~~~~~~~~~~~ /TargetCall(Create) ~~~~~~~~~~~~\n');
try {
- const request = req.body;
- console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
- console.log(`Source Connection ID: ${callConnectionId2}`);
- console.log(`Target Connection ID: ${callConnectionId1}`);
- console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
-
- // Get the target connection (where we want to move participants to)
- const targetConnection = acsClient.getCallConnection(callConnectionId1);
-
- // Get participants from source connection for reference (optional)
- const sourceConnection = acsClient.getCallConnection(callConnectionId2);
-
- // Create participant identifier based on the input
- let participantToMove;
- if (acsOutboundPhoneNumber.startsWith('+')) {
- // Phone number
- participantToMove = { phoneNumber: acsOutboundPhoneNumber };
- console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
- } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
- // ACS Communication User
- participantToMove = { communicationUserId: acsOutboundPhoneNumber };
- console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
- } else {
- console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
- }
-
- // Prepare move participants options
- const options : MoveParticipantsOptions = {
- operationContext: "MoveParticipant2"
+ const callbackUri = `${callbackUriHost}/api/callbacks`;
+ const callInvite = new CommunicationUserIdentifier(acsTarget);
+ const createCallOptions = {
+ callInvite,
+ callbackUri,
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: 'https://cognitive-service-waferwire.cognitiveservices.azure.com/'
+ }
};
- // Call the ACS SDK to move participants
- await targetConnection.moveParticipants([participantToMove], callConnectionId2, options);
- callConnectionId2 = "";
- callerId2 = "";
- calleeId2 = "";
- calleeId1 = acsTestIdentity2;
-
- // For demonstration, assume success
- console.log('Move Participants operation completed successfully');
- console.log(`Moved ${acsTestIdentity2} from ${callConnectionId2} to ${callConnectionId1}`);
- console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
+ const createCallResult = await acsClient.createCall(createCallOptions);
+ targetCallConnectionId = createCallResult.callConnectionProperties.callConnectionId;
+
+ const logMsg = `
+ TargetCall:
+ -----------
+ From: Call Automation
+ To: ${acsTarget}
+ Target Call Connection Id: ${targetCallConnectionId}
+ Correlation Id: ${createCallResult.callConnectionProperties.correlationId}
+ `;
+ console.log(logMsg);
+ res.type('text/plain').send(logMsg);
} catch (err) {
- console.error(`Error in manual move participant operation: ${err.message}`);
+ console.error('Error creating call:', err);
+ res.status(500).send('Error creating call: ' + err.message);
}
- res.redirect('/');
});
-app.get('/moveParticipant3', async (req, res) => {
- console.log('--------- MoveParticipant API End Point -------------------');
-
+app.get('/GetParticipants/:callConnectionId', async (req, res) => {
+ const callConnectionId = req.params.callConnectionId;
+ console.log(`\n~~~~~~~~~~~~ /GetParticipants/${callConnectionId} ~~~~~~~~~~~~\n`);
try {
- const request = req.body;
- console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
- console.log(`Source Connection ID: ${callConnectionId3}`);
- console.log(`Target Connection ID: ${callConnectionId1}`);
- console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
-
- // Get the target connection (where we want to move participants to)
- const targetConnection = acsClient.getCallConnection(callConnectionId1);
-
- // Get participants from source connection for reference (optional)
- const sourceConnection = acsClient.getCallConnection(callConnectionId3);
-
- // Create participant identifier based on the input
- let participantToMove;
- if (acsOutboundPhoneNumber.startsWith('+')) {
- // Phone number
- participantToMove = { phoneNumber: acsOutboundPhoneNumber };
- console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
- } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
- // ACS Communication User
- participantToMove = { communicationUserId: acsOutboundPhoneNumber };
- console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
+ const callConnection = acsClient.getCallConnection(callConnectionId);
+ const participantsResponse = await callConnection.getParticipants();
+ const participants = participantsResponse.value;
+
+ // Format participant info
+ const participantInfo = participants.map(p => {
+ let type = p.identifier.kind || p.identifier.constructor.name;
+ let rawId = p.identifier.rawId;
+ let phoneNumber = p.identifier.phoneNumber || null;
+ let acsUserId = p.identifier.communicationUserId || null;
+
+ return {
+ rawId,
+ type,
+ phoneNumber,
+ acsUserId
+ };
+ });
+
+ // Sort: phone numbers first, then ACS users
+ participantInfo.sort((a, b) => {
+ if (!a.acsUserId && b.acsUserId) return -1;
+ if (a.acsUserId && !b.acsUserId) return 1;
+ return 0;
+ });
+
+ // Format output
+ if (participantInfo.length === 0) {
+ return res.status(404).json({
+ message: "No participants found for the specified call connection.",
+ callConnectionId
+ });
} else {
- console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
+ let msg = `\nNo of Participants: ${participantInfo.length}\nParticipants: \n-------------\n`;
+ msg += participantInfo.map((p, i) => {
+ if (p.acsUserId) {
+ return `${i + 1}. ${p.type} - RawId: ${p.acsUserId}`;
+ } else {
+ return `${i + 1}. ${p.type} - RawId: ${p.rawId}, Phone: ${p.phoneNumber}`;
+ }
+ }).join('\n');
+ console.log(msg);
+ return res.type('text/plain').send(msg);
}
-
- // Prepare move participants options
- const options : MoveParticipantsOptions = {
- operationContext: "MoveParticipant3"
- };
-
- // Call the ACS SDK to move participants
- await targetConnection.moveParticipants([participantToMove], callConnectionId3, options);
- callConnectionId3 = "";
- callerId3 = "";
- calleeId3 = "";
- calleeId1 = acsTestIdentity3;
-
- // For demonstration, assume success
- console.log('Move Participants operation completed successfully');
- console.log(`Moved ${acsTestIdentity3} from ${callConnectionId3} to ${callConnectionId1}`);
- console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
- } catch (err) {
- console.error(`Error in manual move participant operation: ${err.message}`);
+ } catch (ex) {
+ console.error(`Error getting participants for call ${callConnectionId}: ${ex.message}`);
+ return res.status(400).json({
+ error: ex.message,
+ callConnectionId
+ });
}
- res.redirect('/');
});
app.get('/terminateCalls', async (req, res) => {
- console.log(`calls 1: ${callConnectionId1}, 2: ${callConnectionId2}, 3: ${callConnectionId3}`);
- if (callConnectionId1) {
+ console.log(`calls 1: ${lobbyCallConnectionId}, 2: ${targetCallConnectionId}`);
+ if (lobbyCallConnectionId) {
try {
- console.log(`Terminating Call 1 with ID: ${callConnectionId1}`);
- const callConnection1 = acsClient.getCallConnection(callConnectionId1);
- await callConnection1.hangUp(true);
+ console.log(`Terminating Lobby Call with ID: ${lobbyCallConnectionId}`);
+ const lobbyConnection = acsClient.getCallConnection(lobbyCallConnectionId);
+ await lobbyConnection.hangUp(true);
} catch (error) {
- console.error(`Error terminating Call 1: ${error.message}`);
+ console.error(`Error terminating Lobby Call: ${error.message}`);
}
}
- if (callConnectionId2) {
+ if (targetCallConnectionId) {
try {
- console.log(`Terminating Call 2 with ID: ${callConnectionId2}`);
- const callConnection2 = acsClient.getCallConnection(callConnectionId2);
- await callConnection2.hangUp(true);
+ console.log(`Terminating Target Call with ID: ${targetCallConnectionId}`);
+ const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
+ await targetConnection.hangUp(true);
} catch (error) {
- console.error(`Error terminating Call 2: ${error.message}`);
- }
- }
- if (callConnectionId3) {
- try {
- console.log(`Terminating Call 3 with ID: ${callConnectionId3}`);
- const callConnection3 = acsClient.getCallConnection(callConnectionId3);
- await callConnection3.hangUp(true);
- } catch (error) {
- console.error(`Error terminating Call 3: ${error.message}`);
+ console.error(`Error terminating Target Call: ${error.message}`);
}
}
console.log("Calls hung up successfully.");
- callConnectionId1 = "";
- callConnectionId2 = "";
- callConnectionId3 = "";
- callerId1 = "";
- callerId2 = "";
- callerId3 = "";
- calleeId1 = "";
- calleeId2 = "";
- calleeId3 = "";
+ lobbyCallConnectionId = "";
+ targetCallConnectionId = "";
+ lobbyCallerId = "";
res.redirect('/');
});
-app.post('/api/moveParticipantEvent', async (req, res) => {
+app.post('/api/LobbyCallSupportEventHandler', async (req, res) => {
console.log('--------- /api/moveParticipantEvent -------------------');
const event = req.body[0];
const eventData = event.data;
@@ -333,59 +251,32 @@ app.post('/api/moveParticipantEvent', async (req, res) => {
console.log(`From Caller Id: ${fromCallerId}`);
console.log(`To Caller Id : ${toCallerId}`);
- // Scenario 1: User calls from their phone number to ACS inbound number
- if (fromCallerId.includes(userPhoneNumber)) {
- console.log('=== SCENARIO 1: USER INCOMING CALL ===');
-
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const options : AnswerCallOptions = {
- operationContext: "CallOne"
+ // Lobby Call: Answer
+ if (toCallerId.includes(acsGeneratedId)) {
+ const callbackUri = `${callbackUriHost}/api/callbacks`;
+ const options = {
+ incomingCallContext: eventData.incomingCallContext,
+ callbackUri: callbackUri,
+ operationContext: 'LobbyCall',
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ }
};
- //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
- var answerCallResult = await acsClient.answerCall(eventData.incomingCallContext, callbackUri, options);
- callConnectionId1 = answerCallResult.callConnectionProperties.callConnectionId;
-
- console.log(`User Call Answered - CallConnectionId: ${callConnectionId1}`);
- console.log(`Correlation Id: ${eventData.correlationId}`);
- console.log('Operation Context: CallOne');
- console.log('=== END SCENARIO 1 ===');
- }
- // Scenario 2: ACS inbound number calls ACS outbound number (workflow triggered)
- else if (fromCallerId.includes(acsInboundPhoneNumber)) {
- console.log('=== SCENARIO 2: WORKFLOW CALL TO BE REDIRECTED ===');
- console.log(`Last Workflow Call Type: ${lastWorkflowCallType}`);
-
- // Check which type of workflow call this is and redirect accordingly
- let redirectTarget;
- if (lastWorkflowCallType === 'CallTwo') {
- // Redirect the call to ACS User Identity 2
- redirectTarget = acsTestIdentity2;
- const callee : CommunicationUserIdentifier = {
- communicationUserId: redirectTarget
- };
- const callInvite : CallInvite = {
- targetParticipant: callee
- };
- //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
- var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
- console.log('PROCESSING CALL TWO - Redirecting to ACS User Identity 2');
- } else if (lastWorkflowCallType === 'CallThree') {
- // Redirect the call to ACS User Identity 3
- redirectTarget = acsTestIdentity3;
- const callee : CommunicationUserIdentifier = {
- communicationUserId: redirectTarget
- };
- const callInvite : CallInvite = {
- targetParticipant: callee
- };
- //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
- var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
- console.log('PROCESSING CALL THREE - Redirecting to ACS User Identity 3');
- }
- console.log('=== END SCENARIO 2 ===');
+ const answerCallResult = await acsClient.answerCall(options);
+ lobbyCallConnectionId = answerCallResult.callConnectionProperties.callConnectionId;
+
+ console.log(
+ `User Call(Inbound) Answered by Call Automation.`,
+ `From Caller Raw Id: ${fromCallerId}`,
+ `To Caller Raw Id: ${toCallerId}`,
+ `Lobby Call Connection Id: ${lobbyCallConnectionId}`,
+ `Correlation Id: ${eventData.correlationId}`,
+ `Lobby Call answered successfully.`
+ );
}
}
+
res.status(200).send();
});
@@ -396,43 +287,60 @@ app.post('/api/callbacks', async (req, res) => {
// For demonstration, log the event type and IDs
console.log(`Received call event: ${event.type}`);
console.log(`Correlation id:-> ${eventData.correlationId}`)
+
if (event.type === "Microsoft.Communication.CallConnected") {
console.log('\n--------- CallConnected Event Block -------------------');
- switch (eventData.operationContext) {
- case 'CallOne':
- //callConnectionId1 = callConnectionId;
- console.log('=== CALL ONE CONNECTED ===');
- console.log('User call connected');
- console.log('=== END CALL ONE CONNECTED ===');
- break;
- case 'CallTwo':
- //callConnectionId2 = callConnectionId;
- calleeId2 = acsTestIdentity2;
- console.log('=== CALL TWO CONNECTED ===');
- console.log('User call connected');
- console.log('=== END CALL TWO CONNECTED ===');
- break;
- case 'CallThree':
- //callConnectionId3 = callConnectionId;
- calleeId3 = acsTestIdentity3;
- console.log('=== CALL THREE CONNECTED ===');
- console.log('User call connected');
- console.log('=== END CALL THREE CONNECTED ===');
- break;
+
+ if ((eventData.operationContext || '') === 'LobbyCall') {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received call event : ${event.type}`);
+ console.log(`Lobby Call Connection Id: ${eventData.callConnectionId}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+
+ // Record lobby caller id and connection id
+ const lobbyCallConnection = acsClient.getCallConnection(eventData.callConnectionId);
+ const callConnectionProperties = await lobbyCallConnection.getCallConnectionProperties();
+ lobbyCallerId = callConnectionProperties.source.rawId;
+ lobbyCallConnectionId = callConnectionProperties.callConnectionId;
+ console.log(`Lobby Caller Id: ${lobbyCallerId}`);
+ console.log(`Lobby Connection Id: ${lobbyCallConnectionId}`);
+
+ // Play lobby waiting message
+ const callMedia = acsClient.getCallConnection(eventData.callConnectionId).getCallMedia();
+ const textSource = new TextSource("You are currently in a lobby call, we will notify the admin that you are waiting.");
+ textSource.voiceName = "en-US-NancyNeural";
+ const playTo = [new CommunicationUserIdentifier(acsIdentity)];
+ const playToOptions = new PlayOptions({ playSource: textSource, playTo });
+ playToOptions.operationContext = "playToContext";
+ await callMedia.play(playToOptions);
}
- } else if (event.type === 'Microsoft.Communication.CallDisconnected') {
- console.log(`Call disconnected: ${eventData.callConnectionId}`);
- } else {
- // Log other events but don't process them for Move Participants scenario
- console.log(`Received event: ${event.type} - No action needed for Move Participants scenario`);
+ } else if (event.type === "Microsoft.Communication.PlayCompleted") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+
+ // Notify Target Call user via websocket
+ if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
+ console.log("ERROR: Web socket is not available.");
+ return res.status(404).send("Message sent");
+ }
+
+ const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
+ // Notify Client
+ webSocket.send(confirmMessageToTargetCall);
+ console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+ return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+ } else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+ console.log(`Call Connection Id: ${eventData.callConnectionId}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+ } else if (event.type === "Microsoft.Communication.CallDisconnected") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+ console.log(`Call Connection Id: ${eventData.callConnectionId}`);
}
- res.status(200).send();
-});
-app.get('/call-data', (req, res) => {
- console.log("Call Data Endpoint Hit");
- console.log(`call 1: ${callConnectionId1}, call 2: ${callConnectionId2}, call 3: ${callConnectionId3}`);
- res.json({ callConnectionId1, callConnectionId2, callConnectionId3, callerId1, callerId2, callerId3, calleeId1, calleeId2, calleeId3 });
+ res.status(200).send();
});
// GET endpoint to serve the webpage
From 4f0d59dd739990933fc430ca8355dbfb3497d0ca Mon Sep 17 00:00:00 2001
From: nageshy
Date: Sun, 27 Jul 2025 10:16:35 +0530
Subject: [PATCH 03/12] Update code
---
callautomation-lobbycall-sample/package.json | 2 +-
callautomation-lobbycall-sample/src/app.ts | 7 ++-----
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/callautomation-lobbycall-sample/package.json b/callautomation-lobbycall-sample/package.json
index 57a994cf..6582ac9b 100644
--- a/callautomation-lobbycall-sample/package.json
+++ b/callautomation-lobbycall-sample/package.json
@@ -11,7 +11,7 @@
"author": "",
"license": "ISC",
"dependencies": {
- "@azure/communication-call-automation": "^1.5.0",
+ "@azure/communication-call-automation": "file:C:/Projects/Repos/azure-sdk-for-js/sdk/communication/communication-call-automation",
"@azure/communication-common": "^2.2.0",
"@azure/communication-identity": "^1.3.1",
"@azure/communication-rooms": "^1.1.1",
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
index 1200eba5..af056a8b 100644
--- a/callautomation-lobbycall-sample/src/app.ts
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -1,12 +1,9 @@
import { config } from 'dotenv';
import express, { Application } from 'express';
-import { CommunicationUserIdentifier, PhoneNumberIdentifier } from "@azure/communication-common";
import {
- CallAutomationClient,
- CallInvite,
- AnswerCallOptions,
- MoveParticipantsOptions
+ CallAutomationClient
} from "@azure/communication-call-automation";
+import { PhoneNumberIdentifier, CommunicationUserIdentifier } from "@azure/communication-common";
config();
From 9b03e3a7bb2e43725fc8b9caacd45592cf31235c Mon Sep 17 00:00:00 2001
From: nageshy
Date: Sun, 27 Jul 2025 10:58:05 +0530
Subject: [PATCH 04/12] Update code
---
callautomation-lobbycall-sample/package.json | 2 +-
callautomation-lobbycall-sample/src/app.ts | 514 +-
.../src/app.ts.xxx | 277 +
.../package-lock.json | 7174 +++++++++++++++++
4 files changed, 7794 insertions(+), 173 deletions(-)
create mode 100644 callautomation-lobbycall-sample/src/app.ts.xxx
create mode 100644 callautomation-multiple-dial-out/package-lock.json
diff --git a/callautomation-lobbycall-sample/package.json b/callautomation-lobbycall-sample/package.json
index 6582ac9b..d49147a0 100644
--- a/callautomation-lobbycall-sample/package.json
+++ b/callautomation-lobbycall-sample/package.json
@@ -11,7 +11,7 @@
"author": "",
"license": "ISC",
"dependencies": {
- "@azure/communication-call-automation": "file:C:/Projects/Repos/azure-sdk-for-js/sdk/communication/communication-call-automation",
+ "@azure/communication-call-automation": "file:../../azure-sdk-for-js/sdk/communication/communication-call-automation",
"@azure/communication-common": "^2.2.0",
"@azure/communication-identity": "^1.3.1",
"@azure/communication-rooms": "^1.1.1",
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
index af056a8b..bd19a61e 100644
--- a/callautomation-lobbycall-sample/src/app.ts
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -1,9 +1,12 @@
import { config } from 'dotenv';
import express, { Application } from 'express';
+import { CommunicationUserIdentifier, PhoneNumberIdentifier } from "@azure/communication-common";
import {
- CallAutomationClient
+ CallAutomationClient,
+ CallInvite,
+ AnswerCallOptions,
+ MoveParticipantsOptions
} from "@azure/communication-call-automation";
-import { PhoneNumberIdentifier, CommunicationUserIdentifier } from "@azure/communication-common";
config();
@@ -21,7 +24,6 @@ let lobbyCallerId: string;
const callbackUriHost = process.env.CALLBACK_URI || "";
const connectionString = process.env.CONNECTION_STRING || ""
const endpoint = process.env.PMA_ENDPOINT || ""
-let webSocket = null;
async function createAcsClient() {
lobbyCallConnectionId = "";
@@ -33,99 +35,28 @@ async function createAcsClient() {
console.log("Initialized ACS Client.");
}
-const http = require('http');
-const WebSocket = require('ws');
-const server = http.createServer(app);
-
-// WebSocket server setup
-const wss = new WebSocket.Server({ noServer: true });
-
-server.on('upgrade', (request, socket, head) => {
- // Only accept connections to the correct path
- const url = request.url || '';
- if (url === `/ws/${process.env.SOCKET_TOKEN}`) {
- wss.handleUpgrade(request, socket, head, function done(ws) {
- wss.emit('connection', ws, request);
- });
- } else {
- socket.destroy();
- }
-});
-
-wss.on('connection', (ws) => {
- webSocket = ws;
- console.log('Received WEB SOCKET request.');
-
- ws.on('message', async (message) => {
- const jsResponse = message.toString();
- console.log(`Received from JS: ${jsResponse}`);
-
- // Move participant to target call if response is "yes"
- if (jsResponse.trim().toLowerCase() === 'yes') {
- console.log('TODO: Move Participant');
- try {
- console.log(`
- ~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~
- Move Participant operation started..
- Source Caller Id: ${lobbyCallerId}
- Source Connection Id: ${lobbyCallConnectionId}
- Target Connection Id: ${targetCallConnectionId}
- `);
-
- // Get the target connection
- const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
-
- // Get participants from source connection for reference
- // const sourceConnection = client.getCallConnection(lobbyConnectionId);
-
- // Create participant identifier based on the input
- let participantToMove;
- if (lobbyCallerId.startsWith('+')) {
- // Phone number
- participantToMove = new PhoneNumberIdentifier(lobbyCallerId);
- } else {
- // ACS Communication User
- participantToMove = new CommunicationUserIdentifier(lobbyCallerId);
- }
-
- const response = await targetConnection.moveParticipants({
- participantsToMove: [participantToMove],
- sourceCallConnectionId: lobbyCallConnectionId
- });
- const rawResponse = response._response;
- if (rawResponse.status >= 200 && rawResponse.status <= 299) {
- console.log();
- console.log('Move Participants operation completed successfully.');
- } else {
- throw new Error(`Move Participants operation failed with status code: ${rawResponse.status}`);
- }
- } catch (ex) {
- console.log(`Error in manual move participants operation: ${ex.message}`);
- }
- }
- });
-
- ws.on('close', () => {
- webSocket = null;
- });
-});
-
app.get('/TargetCallToAcsUser(Create)', async (req, res) => {
const acsTarget = req.body.acsTarget; // expects { "acsTarget": "" }
console.log('\n~~~~~~~~~~~~ /TargetCall(Create) ~~~~~~~~~~~~\n');
try {
const callbackUri = `${callbackUriHost}/api/callbacks`;
- const callInvite = new CommunicationUserIdentifier(acsTarget);
+ const callee : CommunicationUserIdentifier = {
+ communicationUserId: acsTarget
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee
+ };
const createCallOptions = {
- callInvite,
- callbackUri,
callIntelligenceOptions: {
cognitiveServicesEndpoint: 'https://cognitive-service-waferwire.cognitiveservices.azure.com/'
}
};
-
- const createCallResult = await acsClient.createCall(createCallOptions);
+ const createCallResult = await acsClient.createCall(
+ callInvite,
+ callbackUri,
+ createCallOptions
+ );
targetCallConnectionId = createCallResult.callConnectionProperties.callConnectionId;
const logMsg = `
@@ -149,7 +80,7 @@ app.get('/GetParticipants/:callConnectionId', async (req, res) => {
console.log(`\n~~~~~~~~~~~~ /GetParticipants/${callConnectionId} ~~~~~~~~~~~~\n`);
try {
const callConnection = acsClient.getCallConnection(callConnectionId);
- const participantsResponse = await callConnection.getParticipants();
+ const participantsResponse = await callConnection.getAllParticipant();
const participants = participantsResponse.value;
// Format participant info
@@ -201,34 +132,263 @@ app.get('/GetParticipants/:callConnectionId', async (req, res) => {
}
});
+app.get('/userCallToCallAutomation', async (req, res) => {
+ console.log("--------- UserCallToCallAutomation - Call 1 API Endpoint -------------------");
+ try {
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const callee : PhoneNumberIdentifier = {
+ phoneNumber: acsInboundPhoneNumber
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee,
+ sourceCallIdNumber: {
+ phoneNumber: userPhoneNumber,
+ },
+ };
+ const options = {
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ },
+ operationContext: 'CallOne'
+ };
+ var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
+ callConnectionId1 = createCallResult.callConnectionProperties.callConnectionId;
+ callerId1 = userPhoneNumber;
+ calleeId1 = acsInboundPhoneNumber;
+
+ console.log("=== Call From User to Call Automation ===");
+ console.log(`Created call from ${userPhoneNumber} to ${acsOutboundPhoneNumber}`);
+ console.log(`Connection ID: ${callConnectionId1}`);
+ console.log("=== END WORKFLOW INITIATION ===");
+ } catch (err) {
+ console.error('Error creating call:', err);
+ }
+ res.redirect('/');
+});
+
+app.get('/createCall2', async (req, res) => {
+ console.log('--------- createCall2 - Call 2 API Endpoint " -------------------');
+ try {
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const callee : PhoneNumberIdentifier = {
+ phoneNumber: acsOutboundPhoneNumber
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee,
+ sourceCallIdNumber: {
+ phoneNumber: acsInboundPhoneNumber,
+ },
+ };
+ const options = {
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ },
+ operationContext: 'CallTwo'
+ };
+ var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
+ callConnectionId2 = createCallResult.callConnectionProperties.callConnectionId;
+ // Track this as Call 2
+ lastWorkflowCallType = "CallTwo";
+ callerId2 = acsInboundPhoneNumber;
+ calleeId2 = acsOutboundPhoneNumber;
+
+ console.log('=== CALL TWO WORKFLOW INITIATED ===');
+ console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
+ console.log(`Connection ID: ${callConnectionId2}`);
+ console.log(`This call should trigger MoveParticipantEvent (Scenario 2) which will redirect to ACS user ${acsTestIdentity2}`);
+ console.log('Operation Context: CallTwo');
+ console.log('=== END WORKFLOW INITIATION ===');
+ } catch (err) {
+ console.error('Error creating call:', err);
+ }
+ res.redirect('/');
+});
+
+app.get('/createCall3', async (req, res) => {
+ console.log('--------- createCall3 - Call 3 API Endpoint " -------------------');
+ try {
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const callee : PhoneNumberIdentifier = {
+ phoneNumber: acsOutboundPhoneNumber
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee,
+ sourceCallIdNumber: {
+ phoneNumber: acsInboundPhoneNumber,
+ },
+ };
+ const options = {
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ },
+ operationContext: 'CallThree'
+ };
+ var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
+ callConnectionId3 = createCallResult.callConnectionProperties.callConnectionId;
+ // Track this as Call 2
+ lastWorkflowCallType = "CallThree";
+ callerId3 = acsInboundPhoneNumber;
+ calleeId3 = acsOutboundPhoneNumber;
+
+ console.log('=== CALL THREE WORKFLOW INITIATED ===');
+ console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
+ console.log(`Connection ID: ${callConnectionId3}`);
+ console.log(`This call should trigger MoveParticipantEvent (Scenario 3) which will redirect to ACS user ${acsTestIdentity3}`);
+ console.log('Operation Context: CallThree');
+ console.log('=== END WORKFLOW INITIATION ===');
+ } catch (err) {
+ console.error('Error creating call:', err);
+ }
+ res.redirect('/');
+});
+
+app.get('/moveParticipant2', async (req, res) => {
+ console.log('--------- MoveParticipant API End Point -------------------');
+
+ try {
+ const request = req.body;
+ console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
+ console.log(`Source Connection ID: ${callConnectionId2}`);
+ console.log(`Target Connection ID: ${callConnectionId1}`);
+ console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
+
+ // Get the target connection (where we want to move participants to)
+ const targetConnection = acsClient.getCallConnection(callConnectionId1);
+
+ // Get participants from source connection for reference (optional)
+ const sourceConnection = acsClient.getCallConnection(callConnectionId2);
+
+ // Create participant identifier based on the input
+ let participantToMove;
+ if (acsOutboundPhoneNumber.startsWith('+')) {
+ // Phone number
+ participantToMove = { phoneNumber: acsOutboundPhoneNumber };
+ console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
+ } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
+ // ACS Communication User
+ participantToMove = { communicationUserId: acsOutboundPhoneNumber };
+ console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
+ } else {
+ console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
+ }
+
+ // Prepare move participants options
+ const options : MoveParticipantsOptions = {
+ operationContext: "MoveParticipant2"
+ };
+
+ // Call the ACS SDK to move participants
+ await targetConnection.moveParticipants([participantToMove], callConnectionId2, options);
+ callConnectionId2 = "";
+ callerId2 = "";
+ calleeId2 = "";
+ calleeId1 = acsTestIdentity2;
+
+ // For demonstration, assume success
+ console.log('Move Participants operation completed successfully');
+ console.log(`Moved ${acsTestIdentity2} from ${callConnectionId2} to ${callConnectionId1}`);
+ console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
+ } catch (err) {
+ console.error(`Error in manual move participant operation: ${err.message}`);
+ }
+ res.redirect('/');
+});
+
+app.get('/moveParticipant3', async (req, res) => {
+ console.log('--------- MoveParticipant API End Point -------------------');
+
+ try {
+ const request = req.body;
+ console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
+ console.log(`Source Connection ID: ${callConnectionId3}`);
+ console.log(`Target Connection ID: ${callConnectionId1}`);
+ console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
+
+ // Get the target connection (where we want to move participants to)
+ const targetConnection = acsClient.getCallConnection(callConnectionId1);
+
+ // Get participants from source connection for reference (optional)
+ const sourceConnection = acsClient.getCallConnection(callConnectionId3);
+
+ // Create participant identifier based on the input
+ let participantToMove;
+ if (acsOutboundPhoneNumber.startsWith('+')) {
+ // Phone number
+ participantToMove = { phoneNumber: acsOutboundPhoneNumber };
+ console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
+ } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
+ // ACS Communication User
+ participantToMove = { communicationUserId: acsOutboundPhoneNumber };
+ console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
+ } else {
+ console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
+ }
+
+ // Prepare move participants options
+ const options : MoveParticipantsOptions = {
+ operationContext: "MoveParticipant3"
+ };
+
+ // Call the ACS SDK to move participants
+ await targetConnection.moveParticipants([participantToMove], callConnectionId3, options);
+ callConnectionId3 = "";
+ callerId3 = "";
+ calleeId3 = "";
+ calleeId1 = acsTestIdentity3;
+
+ // For demonstration, assume success
+ console.log('Move Participants operation completed successfully');
+ console.log(`Moved ${acsTestIdentity3} from ${callConnectionId3} to ${callConnectionId1}`);
+ console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
+ } catch (err) {
+ console.error(`Error in manual move participant operation: ${err.message}`);
+ }
+ res.redirect('/');
+});
+
app.get('/terminateCalls', async (req, res) => {
- console.log(`calls 1: ${lobbyCallConnectionId}, 2: ${targetCallConnectionId}`);
- if (lobbyCallConnectionId) {
+ console.log(`calls 1: ${callConnectionId1}, 2: ${callConnectionId2}, 3: ${callConnectionId3}`);
+ if (callConnectionId1) {
+ try {
+ console.log(`Terminating Call 1 with ID: ${callConnectionId1}`);
+ const callConnection1 = acsClient.getCallConnection(callConnectionId1);
+ await callConnection1.hangUp(true);
+ } catch (error) {
+ console.error(`Error terminating Call 1: ${error.message}`);
+ }
+ }
+ if (callConnectionId2) {
try {
- console.log(`Terminating Lobby Call with ID: ${lobbyCallConnectionId}`);
- const lobbyConnection = acsClient.getCallConnection(lobbyCallConnectionId);
- await lobbyConnection.hangUp(true);
+ console.log(`Terminating Call 2 with ID: ${callConnectionId2}`);
+ const callConnection2 = acsClient.getCallConnection(callConnectionId2);
+ await callConnection2.hangUp(true);
} catch (error) {
- console.error(`Error terminating Lobby Call: ${error.message}`);
+ console.error(`Error terminating Call 2: ${error.message}`);
}
}
- if (targetCallConnectionId) {
+ if (callConnectionId3) {
try {
- console.log(`Terminating Target Call with ID: ${targetCallConnectionId}`);
- const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
- await targetConnection.hangUp(true);
+ console.log(`Terminating Call 3 with ID: ${callConnectionId3}`);
+ const callConnection3 = acsClient.getCallConnection(callConnectionId3);
+ await callConnection3.hangUp(true);
} catch (error) {
- console.error(`Error terminating Target Call: ${error.message}`);
+ console.error(`Error terminating Call 3: ${error.message}`);
}
}
console.log("Calls hung up successfully.");
- lobbyCallConnectionId = "";
- targetCallConnectionId = "";
- lobbyCallerId = "";
+ callConnectionId1 = "";
+ callConnectionId2 = "";
+ callConnectionId3 = "";
+ callerId1 = "";
+ callerId2 = "";
+ callerId3 = "";
+ calleeId1 = "";
+ calleeId2 = "";
+ calleeId3 = "";
res.redirect('/');
});
-app.post('/api/LobbyCallSupportEventHandler', async (req, res) => {
+app.post('/api/moveParticipantEvent', async (req, res) => {
console.log('--------- /api/moveParticipantEvent -------------------');
const event = req.body[0];
const eventData = event.data;
@@ -248,32 +408,59 @@ app.post('/api/LobbyCallSupportEventHandler', async (req, res) => {
console.log(`From Caller Id: ${fromCallerId}`);
console.log(`To Caller Id : ${toCallerId}`);
- // Lobby Call: Answer
- if (toCallerId.includes(acsGeneratedId)) {
- const callbackUri = `${callbackUriHost}/api/callbacks`;
- const options = {
- incomingCallContext: eventData.incomingCallContext,
- callbackUri: callbackUri,
- operationContext: 'LobbyCall',
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- }
+ // Scenario 1: User calls from their phone number to ACS inbound number
+ if (fromCallerId.includes(userPhoneNumber)) {
+ console.log('=== SCENARIO 1: USER INCOMING CALL ===');
+
+ const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
+ const options : AnswerCallOptions = {
+ operationContext: "CallOne"
};
- const answerCallResult = await acsClient.answerCall(options);
- lobbyCallConnectionId = answerCallResult.callConnectionProperties.callConnectionId;
-
- console.log(
- `User Call(Inbound) Answered by Call Automation.`,
- `From Caller Raw Id: ${fromCallerId}`,
- `To Caller Raw Id: ${toCallerId}`,
- `Lobby Call Connection Id: ${lobbyCallConnectionId}`,
- `Correlation Id: ${eventData.correlationId}`,
- `Lobby Call answered successfully.`
- );
+ //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
+ var answerCallResult = await acsClient.answerCall(eventData.incomingCallContext, callbackUri, options);
+ callConnectionId1 = answerCallResult.callConnectionProperties.callConnectionId;
+
+ console.log(`User Call Answered - CallConnectionId: ${callConnectionId1}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+ console.log('Operation Context: CallOne');
+ console.log('=== END SCENARIO 1 ===');
+ }
+ // Scenario 2: ACS inbound number calls ACS outbound number (workflow triggered)
+ else if (fromCallerId.includes(acsInboundPhoneNumber)) {
+ console.log('=== SCENARIO 2: WORKFLOW CALL TO BE REDIRECTED ===');
+ console.log(`Last Workflow Call Type: ${lastWorkflowCallType}`);
+
+ // Check which type of workflow call this is and redirect accordingly
+ let redirectTarget;
+ if (lastWorkflowCallType === 'CallTwo') {
+ // Redirect the call to ACS User Identity 2
+ redirectTarget = acsTestIdentity2;
+ const callee : CommunicationUserIdentifier = {
+ communicationUserId: redirectTarget
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee
+ };
+ //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
+ var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
+ console.log('PROCESSING CALL TWO - Redirecting to ACS User Identity 2');
+ } else if (lastWorkflowCallType === 'CallThree') {
+ // Redirect the call to ACS User Identity 3
+ redirectTarget = acsTestIdentity3;
+ const callee : CommunicationUserIdentifier = {
+ communicationUserId: redirectTarget
+ };
+ const callInvite : CallInvite = {
+ targetParticipant: callee
+ };
+ //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
+ var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
+ console.log('PROCESSING CALL THREE - Redirecting to ACS User Identity 3');
+ }
+ console.log('=== END SCENARIO 2 ===');
}
}
-
res.status(200).send();
});
@@ -284,62 +471,45 @@ app.post('/api/callbacks', async (req, res) => {
// For demonstration, log the event type and IDs
console.log(`Received call event: ${event.type}`);
console.log(`Correlation id:-> ${eventData.correlationId}`)
-
if (event.type === "Microsoft.Communication.CallConnected") {
console.log('\n--------- CallConnected Event Block -------------------');
-
- if ((eventData.operationContext || '') === 'LobbyCall') {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received call event : ${event.type}`);
- console.log(`Lobby Call Connection Id: ${eventData.callConnectionId}`);
- console.log(`Correlation Id: ${eventData.correlationId}`);
-
- // Record lobby caller id and connection id
- const lobbyCallConnection = acsClient.getCallConnection(eventData.callConnectionId);
- const callConnectionProperties = await lobbyCallConnection.getCallConnectionProperties();
- lobbyCallerId = callConnectionProperties.source.rawId;
- lobbyCallConnectionId = callConnectionProperties.callConnectionId;
- console.log(`Lobby Caller Id: ${lobbyCallerId}`);
- console.log(`Lobby Connection Id: ${lobbyCallConnectionId}`);
-
- // Play lobby waiting message
- const callMedia = acsClient.getCallConnection(eventData.callConnectionId).getCallMedia();
- const textSource = new TextSource("You are currently in a lobby call, we will notify the admin that you are waiting.");
- textSource.voiceName = "en-US-NancyNeural";
- const playTo = [new CommunicationUserIdentifier(acsIdentity)];
- const playToOptions = new PlayOptions({ playSource: textSource, playTo });
- playToOptions.operationContext = "playToContext";
- await callMedia.play(playToOptions);
+ switch (eventData.operationContext) {
+ case 'CallOne':
+ //callConnectionId1 = callConnectionId;
+ console.log('=== CALL ONE CONNECTED ===');
+ console.log('User call connected');
+ console.log('=== END CALL ONE CONNECTED ===');
+ break;
+ case 'CallTwo':
+ //callConnectionId2 = callConnectionId;
+ calleeId2 = acsTestIdentity2;
+ console.log('=== CALL TWO CONNECTED ===');
+ console.log('User call connected');
+ console.log('=== END CALL TWO CONNECTED ===');
+ break;
+ case 'CallThree':
+ //callConnectionId3 = callConnectionId;
+ calleeId3 = acsTestIdentity3;
+ console.log('=== CALL THREE CONNECTED ===');
+ console.log('User call connected');
+ console.log('=== END CALL THREE CONNECTED ===');
+ break;
}
- } else if (event.type === "Microsoft.Communication.PlayCompleted") {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received event: ${event.type}`);
-
- // Notify Target Call user via websocket
- if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
- console.log("ERROR: Web socket is not available.");
- return res.status(404).send("Message sent");
- }
-
- const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
- // Notify Client
- webSocket.send(confirmMessageToTargetCall);
- console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
- return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
- } else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received event: ${event.type}`);
- console.log(`Call Connection Id: ${eventData.callConnectionId}`);
- console.log(`Correlation Id: ${eventData.correlationId}`);
- } else if (event.type === "Microsoft.Communication.CallDisconnected") {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received event: ${event.type}`);
- console.log(`Call Connection Id: ${eventData.callConnectionId}`);
+ } else if (event.type === 'Microsoft.Communication.CallDisconnected') {
+ console.log(`Call disconnected: ${eventData.callConnectionId}`);
+ } else {
+ // Log other events but don't process them for Move Participants scenario
+ console.log(`Received event: ${event.type} - No action needed for Move Participants scenario`);
}
-
res.status(200).send();
});
+app.get('/call-data', (req, res) => {
+ console.log("Call Data Endpoint Hit");
+ console.log(`call 1: ${callConnectionId1}, call 2: ${callConnectionId2}, call 3: ${callConnectionId3}`);
+ res.json({ callConnectionId1, callConnectionId2, callConnectionId3, callerId1, callerId2, callerId3, calleeId1, calleeId2, calleeId3 });
+});
+
// GET endpoint to serve the webpage
app.get('/', (req, res) => {
res.sendFile('index.html', { root: 'src/webpage' });
diff --git a/callautomation-lobbycall-sample/src/app.ts.xxx b/callautomation-lobbycall-sample/src/app.ts.xxx
new file mode 100644
index 00000000..1cc06e64
--- /dev/null
+++ b/callautomation-lobbycall-sample/src/app.ts.xxx
@@ -0,0 +1,277 @@
+import { config } from 'dotenv';
+import express, { Application } from 'express';
+import { CommunicationUserIdentifier, PhoneNumberIdentifier } from "@azure/communication-common";
+import {
+ CallAutomationClient,
+ CallInvite,
+ AnswerCallOptions,
+ MoveParticipantsOptions
+} from "@azure/communication-call-automation";
+
+config();
+
+const PORT = process.env.PORT;
+const app: Application = express();
+app.use(express.static('webpage'));
+app.use(express.urlencoded({ extended: true }));
+app.use(express.json());
+
+let lobbyCallConnectionId: string;
+let targetCallConnectionId: string;
+let acsGeneratedId: string;
+let acsClient: CallAutomationClient;
+let lobbyCallerId: string;
+const callbackUriHost = process.env.CALLBACK_URI || "";
+const connectionString = process.env.CONNECTION_STRING || ""
+const endpoint = process.env.PMA_ENDPOINT || ""
+
+async function createAcsClient() {
+ lobbyCallConnectionId = "";
+ targetCallConnectionId = "";
+ acsGeneratedId = process.env.ACS_GENERATED_ID || "";
+ lobbyCallerId = "";
+ // acsClient = new CallAutomationClient(endpoint, connectionString);
+ acsClient = new CallAutomationClient(connectionString);
+ console.log("Initialized ACS Client.");
+}
+
+app.get('/TargetCallToAcsUser(Create)', async (req, res) => {
+ const acsTarget = req.body.acsTarget; // expects { "acsTarget": "" }
+ console.log('\n~~~~~~~~~~~~ /TargetCall(Create) ~~~~~~~~~~~~\n');
+
+ try {
+ const callbackUri = `${callbackUriHost}/api/callbacks`;
+ const callInvite = new CommunicationUserIdentifier(acsTarget);
+ const createCallOptions = {
+ callInvite,
+ callbackUri,
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: 'https://cognitive-service-waferwire.cognitiveservices.azure.com/'
+ }
+ };
+
+ const createCallResult = await acsClient.createCall(createCallOptions);
+ targetCallConnectionId = createCallResult.callConnectionProperties.callConnectionId;
+
+ const logMsg = `
+ TargetCall:
+ -----------
+ From: Call Automation
+ To: ${acsTarget}
+ Target Call Connection Id: ${targetCallConnectionId}
+ Correlation Id: ${createCallResult.callConnectionProperties.correlationId}
+ `;
+ console.log(logMsg);
+ res.type('text/plain').send(logMsg);
+ } catch (err) {
+ console.error('Error creating call:', err);
+ res.status(500).send('Error creating call: ' + err.message);
+ }
+});
+
+app.get('/GetParticipants/:callConnectionId', async (req, res) => {
+ const callConnectionId = req.params.callConnectionId;
+ console.log(`\n~~~~~~~~~~~~ /GetParticipants/${callConnectionId} ~~~~~~~~~~~~\n`);
+ try {
+ const callConnection = acsClient.getCallConnection(callConnectionId);
+ const participantsResponse = await callConnection.getParticipants();
+ const participants = participantsResponse.value;
+
+ // Format participant info
+ const participantInfo = participants.map(p => {
+ let type = p.identifier.kind || p.identifier.constructor.name;
+ let rawId = p.identifier.rawId;
+ let phoneNumber = p.identifier.phoneNumber || null;
+ let acsUserId = p.identifier.communicationUserId || null;
+
+ return {
+ rawId,
+ type,
+ phoneNumber,
+ acsUserId
+ };
+ });
+
+ // Sort: phone numbers first, then ACS users
+ participantInfo.sort((a, b) => {
+ if (!a.acsUserId && b.acsUserId) return -1;
+ if (a.acsUserId && !b.acsUserId) return 1;
+ return 0;
+ });
+
+ // Format output
+ if (participantInfo.length === 0) {
+ return res.status(404).json({
+ message: "No participants found for the specified call connection.",
+ callConnectionId
+ });
+ } else {
+ let msg = `\nNo of Participants: ${participantInfo.length}\nParticipants: \n-------------\n`;
+ msg += participantInfo.map((p, i) => {
+ if (p.acsUserId) {
+ return `${i + 1}. ${p.type} - RawId: ${p.acsUserId}`;
+ } else {
+ return `${i + 1}. ${p.type} - RawId: ${p.rawId}, Phone: ${p.phoneNumber}`;
+ }
+ }).join('\n');
+ console.log(msg);
+ return res.type('text/plain').send(msg);
+ }
+ } catch (ex) {
+ console.error(`Error getting participants for call ${callConnectionId}: ${ex.message}`);
+ return res.status(400).json({
+ error: ex.message,
+ callConnectionId
+ });
+ }
+});
+
+app.get('/terminateCalls', async (req, res) => {
+ console.log(`calls 1: ${lobbyCallConnectionId}, 2: ${targetCallConnectionId}`);
+ if (lobbyCallConnectionId) {
+ try {
+ console.log(`Terminating Lobby Call with ID: ${lobbyCallConnectionId}`);
+ const lobbyConnection = acsClient.getCallConnection(lobbyCallConnectionId);
+ await lobbyConnection.hangUp(true);
+ } catch (error) {
+ console.error(`Error terminating Lobby Call: ${error.message}`);
+ }
+ }
+ if (targetCallConnectionId) {
+ try {
+ console.log(`Terminating Target Call with ID: ${targetCallConnectionId}`);
+ const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
+ await targetConnection.hangUp(true);
+ } catch (error) {
+ console.error(`Error terminating Target Call: ${error.message}`);
+ }
+ }
+ console.log("Calls hung up successfully.");
+ lobbyCallConnectionId = "";
+ targetCallConnectionId = "";
+ lobbyCallerId = "";
+ res.redirect('/');
+});
+
+app.post('/api/LobbyCallSupportEventHandler', async (req, res) => {
+ console.log('--------- /api/moveParticipantEvent -------------------');
+ const event = req.body[0];
+ const eventData = event.data;
+ if (event.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") {
+ console.log("SubscriptionValidation event");
+ res.status(200).json({
+ validationResponse: eventData.validationCode,
+ });
+ return;
+ }
+
+ // ACS Incoming Call event
+ if (event.eventType === 'Microsoft.Communication.IncomingCall') {
+ const fromCallerId = eventData.from.rawId;
+ const toCallerId = eventData.to.rawId;
+
+ console.log(`From Caller Id: ${fromCallerId}`);
+ console.log(`To Caller Id : ${toCallerId}`);
+
+ // Lobby Call: Answer
+ if (toCallerId.includes(acsGeneratedId)) {
+ const callbackUri = `${callbackUriHost}/api/callbacks`;
+ const options = {
+ incomingCallContext: eventData.incomingCallContext,
+ callbackUri: callbackUri,
+ operationContext: 'LobbyCall',
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ }
+ };
+
+ const answerCallResult = await acsClient.answerCall(options);
+ lobbyCallConnectionId = answerCallResult.callConnectionProperties.callConnectionId;
+
+ console.log(
+ `User Call(Inbound) Answered by Call Automation.`,
+ `From Caller Raw Id: ${fromCallerId}`,
+ `To Caller Raw Id: ${toCallerId}`,
+ `Lobby Call Connection Id: ${lobbyCallConnectionId}`,
+ `Correlation Id: ${eventData.correlationId}`,
+ `Lobby Call answered successfully.`
+ );
+ }
+ }
+
+ res.status(200).send();
+});
+
+app.post('/api/callbacks', async (req, res) => {
+ console.log('--------- /api/callbacks -------------------');
+ const event = req.body[0];
+ const eventData = event.data;
+ // For demonstration, log the event type and IDs
+ console.log(`Received call event: ${event.type}`);
+ console.log(`Correlation id:-> ${eventData.correlationId}`)
+
+ if (event.type === "Microsoft.Communication.CallConnected") {
+ console.log('\n--------- CallConnected Event Block -------------------');
+
+ if ((eventData.operationContext || '') === 'LobbyCall') {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received call event : ${event.type}`);
+ console.log(`Lobby Call Connection Id: ${eventData.callConnectionId}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+
+ // Record lobby caller id and connection id
+ const lobbyCallConnection = acsClient.getCallConnection(eventData.callConnectionId);
+ const callConnectionProperties = await lobbyCallConnection.getCallConnectionProperties();
+ lobbyCallerId = callConnectionProperties.source.rawId;
+ lobbyCallConnectionId = callConnectionProperties.callConnectionId;
+ console.log(`Lobby Caller Id: ${lobbyCallerId}`);
+ console.log(`Lobby Connection Id: ${lobbyCallConnectionId}`);
+
+ // Play lobby waiting message
+ const callMedia = acsClient.getCallConnection(eventData.callConnectionId).getCallMedia();
+ const textSource = new TextSource("You are currently in a lobby call, we will notify the admin that you are waiting.");
+ textSource.voiceName = "en-US-NancyNeural";
+ const playTo = [new CommunicationUserIdentifier(acsIdentity)];
+ const playToOptions = new PlayOptions({ playSource: textSource, playTo });
+ playToOptions.operationContext = "playToContext";
+ await callMedia.play(playToOptions);
+ }
+ } else if (event.type === "Microsoft.Communication.PlayCompleted") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+
+ // Notify Target Call user via websocket
+ if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
+ console.log("ERROR: Web socket is not available.");
+ return res.status(404).send("Message sent");
+ }
+
+ const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
+ // Notify Client
+ webSocket.send(confirmMessageToTargetCall);
+ console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+ return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+ } else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+ console.log(`Call Connection Id: ${eventData.callConnectionId}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+ } else if (event.type === "Microsoft.Communication.CallDisconnected") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+ console.log(`Call Connection Id: ${eventData.callConnectionId}`);
+ }
+
+ res.status(200).send();
+});
+
+// GET endpoint to serve the webpage
+app.get('/', (req, res) => {
+ res.sendFile('index.html', { root: 'src/webpage' });
+});
+
+// Start the server
+app.listen(PORT, async () => {
+ console.log(`Server is listening on port ${PORT}`);
+ await createAcsClient();
+});
diff --git a/callautomation-multiple-dial-out/package-lock.json b/callautomation-multiple-dial-out/package-lock.json
new file mode 100644
index 00000000..5fb643d2
--- /dev/null
+++ b/callautomation-multiple-dial-out/package-lock.json
@@ -0,0 +1,7174 @@
+{
+ "name": "callautomation_connect_rooms",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "callautomation_connect_rooms",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "@azure/communication-call-automation": "file:../../azure-sdk-for-js/sdk/communication/communication-call-automation",
+ "@azure/communication-common": "^2.2.0",
+ "@azure/communication-identity": "^1.3.1",
+ "@azure/communication-rooms": "^1.1.1",
+ "@azure/eventgrid": "^4.12.0",
+ "@types/express": "^4.17.17",
+ "@types/node": "^20.2.1",
+ "dotenv": "^16.0.3",
+ "express": "^4.18.2"
+ },
+ "devDependencies": {
+ "nodemon": "^2.0.22",
+ "ts-node": "^10.9.1",
+ "typescript": "^5.0.4"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@arethetypeswrong+cli@0.17.4/node_modules/@arethetypeswrong/cli": {
+ "version": "0.17.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@arethetypeswrong/core": "0.17.4",
+ "chalk": "^4.1.2",
+ "cli-table3": "^0.6.3",
+ "commander": "^10.0.1",
+ "marked": "^9.1.2",
+ "marked-terminal": "^7.1.0",
+ "semver": "^7.5.4"
+ },
+ "bin": {
+ "attw": "dist/index.js"
+ },
+ "devDependencies": {
+ "@types/marked": "^5.0.0",
+ "@types/marked-terminal": "^3.1.3",
+ "@types/node": "^22.5.0",
+ "@types/semver": "^7.5.3",
+ "ts-expose-internals": "5.6.1-rc"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+arm-servicebus@6.1.0/node_modules/@azure/arm-servicebus": {
+ "version": "6.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-client": "^1.6.1",
+ "@azure/core-lro": "^2.2.0",
+ "@azure/core-paging": "^1.2.0",
+ "@azure/core-rest-pipeline": "^1.8.0",
+ "tslib": "^2.2.0"
+ },
+ "devDependencies": {
+ "@azure-tools/test-credential": "^1.0.0",
+ "@azure-tools/test-recorder": "^2.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/identity": "^2.0.1",
+ "@microsoft/api-extractor": "^7.31.1",
+ "@rollup/plugin-commonjs": "^21.0.1",
+ "@rollup/plugin-json": "^4.1.0",
+ "@rollup/plugin-multi-entry": "^4.1.0",
+ "@rollup/plugin-node-resolve": "^13.1.3",
+ "@types/chai": "^4.2.8",
+ "@types/node": "^14.0.0",
+ "chai": "^4.2.0",
+ "cross-env": "^7.0.2",
+ "mkdirp": "^1.0.4",
+ "mocha": "^7.1.1",
+ "rimraf": "^3.0.0",
+ "rollup": "^2.66.1",
+ "rollup-plugin-sourcemaps": "^0.6.3",
+ "typescript": "~4.8.0",
+ "uglify-js": "^3.4.9"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+core-lro@2.7.2/node_modules/@azure/core-lro": {
+ "version": "2.7.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-util": "^1.2.0",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@microsoft/api-extractor": "^7.40.3",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^1.3.1",
+ "@vitest/coverage-istanbul": "^1.3.1",
+ "eslint": "^8.56.0",
+ "playwright": "^1.41.2",
+ "prettier": "^3.2.5",
+ "rimraf": "^5.0.5",
+ "tshy": "^1.13.0",
+ "typescript": "~5.3.3",
+ "vitest": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+identity@4.10.0/node_modules/@azure/identity": {
+ "version": "4.10.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-rest-pipeline": "^1.17.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.11.0",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-browser": "^4.2.0",
+ "@azure/msal-node": "^3.5.0",
+ "open": "^10.1.0",
+ "tslib": "^2.2.0"
+ },
+ "devDependencies": {
+ "@azure-tools/test-recorder": "^4.1.0",
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/keyvault-keys": "^4.2.0",
+ "@types/jsonwebtoken": "^9.0.0",
+ "@types/ms": "^2.1.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "assertion-error": "^2.0.1",
+ "dotenv": "^16.0.0",
+ "eslint": "^9.9.0",
+ "jsonwebtoken": "^9.0.0",
+ "ms": "^2.1.3",
+ "playwright": "^1.48.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity": {
+ "version": "4.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.5.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.3.0",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-browser": "^3.11.1",
+ "@azure/msal-node": "^2.9.2",
+ "events": "^3.0.0",
+ "jws": "^4.0.0",
+ "open": "^8.0.0",
+ "stoppable": "^1.1.0",
+ "tslib": "^2.2.0"
+ },
+ "devDependencies": {
+ "@azure-tools/test-recorder": "^3.0.0",
+ "@azure-tools/test-utils": "^1.0.1",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/keyvault-keys": "^4.2.0",
+ "@microsoft/api-extractor": "^7.31.1",
+ "@types/chai": "^4.1.6",
+ "@types/jsonwebtoken": "^9.0.0",
+ "@types/jws": "^3.2.2",
+ "@types/mocha": "^10.0.0",
+ "@types/ms": "^0.7.31",
+ "@types/node": "^18.0.0",
+ "@types/sinon": "^17.0.0",
+ "@types/stoppable": "^1.1.0",
+ "@types/uuid": "^8.0.0",
+ "chai": "^4.2.0",
+ "cross-env": "^7.0.3",
+ "dotenv": "^16.0.0",
+ "eslint": "^8.0.0",
+ "inherits": "^2.0.3",
+ "jsonwebtoken": "^9.0.0",
+ "karma": "^6.2.0",
+ "karma-chrome-launcher": "^3.0.0",
+ "karma-coverage": "^2.0.0",
+ "karma-env-preprocessor": "^0.1.1",
+ "karma-junit-reporter": "^2.0.1",
+ "karma-mocha": "^2.0.1",
+ "karma-mocha-reporter": "^2.2.5",
+ "karma-sourcemap-loader": "^0.3.8",
+ "mocha": "^10.0.0",
+ "ms": "^2.1.3",
+ "nyc": "^15.1.0",
+ "puppeteer": "^22.2.0",
+ "rimraf": "^5.0.5",
+ "sinon": "^17.0.0",
+ "ts-node": "^10.0.0",
+ "typescript": "~5.4.5",
+ "util": "^0.12.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+keyvault-keys@4.9.0/node_modules/@azure/keyvault-keys": {
+ "version": "4.9.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-client": "^1.5.0",
+ "@azure/core-http-compat": "^2.0.1",
+ "@azure/core-lro": "^2.2.0",
+ "@azure/core-paging": "^1.1.1",
+ "@azure/core-rest-pipeline": "^1.8.1",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.0.0",
+ "@azure/keyvault-common": "^2.0.0",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "devDependencies": {
+ "@azure-tools/test-credential": "^2.0.0",
+ "@azure-tools/test-recorder": "^4.1.0",
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/identity": "^4.4.1",
+ "@microsoft/api-extractor": "^7.31.1",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^2.1.2",
+ "@vitest/coverage-istanbul": "^2.1.2",
+ "cross-env": "^7.0.2",
+ "dayjs": "^1.10.7",
+ "dotenv": "^16.0.0",
+ "eslint": "^9.9.0",
+ "playwright": "^1.47.2",
+ "rimraf": "^5.0.5",
+ "typescript": "~5.6.2",
+ "vitest": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+msal-browser@4.13.0/node_modules/@azure/msal-browser": {
+ "version": "4.13.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/msal-common": "15.7.0"
+ },
+ "devDependencies": {
+ "@azure/storage-blob": "^12.2.1",
+ "@babel/core": "^7.7.2",
+ "@babel/plugin-proposal-class-properties": "^7.7.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.6.2",
+ "@babel/preset-env": "^7.7.1",
+ "@babel/preset-typescript": "^7.7.2",
+ "@microsoft/api-extractor": "^7.43.4",
+ "@rollup/plugin-node-resolve": "^15.0.1",
+ "@rollup/plugin-terser": "^0.4.0",
+ "@rollup/plugin-typescript": "^11.0.0",
+ "@types/jest": "^29.5.0",
+ "@types/node": "^20.3.1",
+ "dotenv": "^8.2.0",
+ "eslint-config-msal": "file:../../shared-configs/eslint-config-msal",
+ "fake-indexeddb": "^3.1.3",
+ "jest": "^29.5.0",
+ "jest-environment-jsdom": "^29.5.0",
+ "jest-junit": "^16.0.0",
+ "msal-test-utils": "file:../../shared-test-utils",
+ "prettier": "^2.8.7",
+ "rimraf": "^3.0.0",
+ "rollup": "^4.22.4",
+ "rollup-msal": "file:../../shared-configs/rollup-msal",
+ "shx": "^0.3.2",
+ "ssri": "^8.0.1",
+ "ts-jest": "^29.2.5",
+ "ts-jest-resolver": "^2.0.1",
+ "tslib": "^1.10.0",
+ "typescript": "^4.9.5"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+msal-node@2.16.2/node_modules/@azure/msal-node": {
+ "version": "2.16.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/msal-common": "14.16.0",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
+ "devDependencies": {
+ "@microsoft/api-extractor": "^7.43.4",
+ "@rollup/plugin-node-resolve": "^15.0.1",
+ "@rollup/plugin-typescript": "^11.0.0",
+ "@types/jest": "^29.5.0",
+ "@types/jsonwebtoken": "^9.0.1",
+ "@types/node": "^20.3.1",
+ "@types/uuid": "^7.0.0",
+ "eslint-config-msal": "file:../../shared-configs/eslint-config-msal",
+ "jest": "^29.5.0",
+ "prettier": "2.8.7",
+ "rollup": "^4.22.4",
+ "rollup-msal": "file:../../shared-configs/rollup-msal",
+ "ts-jest": "^29.1.0",
+ "tslib": "^1.10.0",
+ "typescript": "^4.9.5",
+ "yargs": "^17.3.1"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+msal-node@3.6.0/node_modules/@azure/msal-node": {
+ "version": "3.6.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/msal-common": "15.7.0",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
+ "devDependencies": {
+ "@microsoft/api-extractor": "^7.43.4",
+ "@rollup/plugin-node-resolve": "^15.0.1",
+ "@rollup/plugin-typescript": "^11.0.0",
+ "@types/jest": "^29.5.0",
+ "@types/jsonwebtoken": "^9.0.1",
+ "@types/node": "^20.3.1",
+ "@types/uuid": "^7.0.0",
+ "eslint-config-msal": "file:../../shared-configs/eslint-config-msal",
+ "jest": "^29.5.0",
+ "jest-junit": "^16.0.0",
+ "prettier": "2.8.7",
+ "rollup": "^4.22.4",
+ "rollup-msal": "file:../../shared-configs/rollup-msal",
+ "ts-jest": "^29.1.0",
+ "tslib": "^1.10.0",
+ "typescript": "^4.9.5",
+ "yargs": "^17.3.1"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+compat@1.2.9_eslint@9.28.0/node_modules/@eslint/compat": {
+ "version": "1.2.9",
+ "dev": true,
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "@eslint/core": "^0.14.0",
+ "c8": "^9.1.0",
+ "eslint": "^9.11.0",
+ "mocha": "^10.4.0",
+ "rollup": "^4.16.2",
+ "typescript": "^5.4.5"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "eslint": "^9.10.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+eslintrc@3.3.1/node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "devDependencies": {
+ "c8": "^7.7.3",
+ "chai": "^4.3.4",
+ "eslint": "^9.20.1",
+ "eslint-config-eslint": "^11.0.0",
+ "eslint-release": "^3.2.0",
+ "fs-teardown": "^0.1.3",
+ "mocha": "^9.0.3",
+ "rollup": "^2.70.1",
+ "shelljs": "^0.8.5",
+ "sinon": "^11.1.2",
+ "temp-dir": "^2.0.0",
+ "typescript": "^5.7.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+js@9.28.0/node_modules/@eslint/js": {
+ "version": "9.28.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@microsoft+api-extractor-model@7.30.6_@types+node@18.19.110/node_modules/@microsoft/api-extractor-model": {
+ "version": "7.30.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@microsoft/tsdoc": "~0.15.1",
+ "@microsoft/tsdoc-config": "~0.17.1",
+ "@rushstack/node-core-library": "5.13.1"
+ },
+ "devDependencies": {
+ "@rushstack/heft": "0.73.2",
+ "decoupled-local-node-rig": "1.0.0",
+ "local-eslint-config": "1.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@microsoft+api-extractor@7.52.8_@types+node@18.19.110/node_modules/@microsoft/api-extractor": {
+ "version": "7.52.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@microsoft/api-extractor-model": "7.30.6",
+ "@microsoft/tsdoc": "~0.15.1",
+ "@microsoft/tsdoc-config": "~0.17.1",
+ "@rushstack/node-core-library": "5.13.1",
+ "@rushstack/rig-package": "0.5.3",
+ "@rushstack/terminal": "0.15.3",
+ "@rushstack/ts-command-line": "5.0.1",
+ "lodash": "~4.17.15",
+ "minimatch": "~3.0.3",
+ "resolve": "~1.22.1",
+ "semver": "~7.5.4",
+ "source-map": "~0.6.1",
+ "typescript": "5.8.2"
+ },
+ "bin": {
+ "api-extractor": "bin/api-extractor"
+ },
+ "devDependencies": {
+ "@rushstack/heft": "0.73.2",
+ "@types/lodash": "4.14.116",
+ "@types/minimatch": "3.0.5",
+ "@types/resolve": "1.20.2",
+ "@types/semver": "7.5.0",
+ "decoupled-local-node-rig": "1.0.0",
+ "local-eslint-config": "1.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api": {
+ "version": "1.9.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "@types/mocha": "10.0.6",
+ "@types/node": "18.6.5",
+ "@types/sinon": "17.0.3",
+ "@types/webpack": "5.28.5",
+ "@types/webpack-env": "1.16.3",
+ "babel-plugin-istanbul": "6.1.1",
+ "codecov": "3.8.3",
+ "cross-var": "1.1.0",
+ "dpdm": "3.13.1",
+ "karma": "6.4.3",
+ "karma-chrome-launcher": "3.1.0",
+ "karma-coverage": "2.2.1",
+ "karma-mocha": "2.0.1",
+ "karma-mocha-webworker": "1.3.0",
+ "karma-spec-reporter": "0.0.36",
+ "karma-webpack": "5.0.1",
+ "lerna": "6.6.2",
+ "memfs": "3.5.3",
+ "mocha": "10.2.0",
+ "nyc": "15.1.0",
+ "sinon": "15.1.2",
+ "ts-loader": "9.5.1",
+ "ts-mocha": "10.0.0",
+ "typescript": "4.4.4",
+ "unionfs": "4.5.4",
+ "webpack": "5.89.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@rollup+plugin-inject@5.0.5_rollup@4.41.1/node_modules/@rollup/plugin-inject": {
+ "version": "5.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.3"
+ },
+ "devDependencies": {
+ "@rollup/plugin-buble": "^1.0.0",
+ "del-cli": "^5.0.0",
+ "locate-character": "^2.0.5",
+ "rollup": "^4.0.0-24",
+ "source-map": "^0.7.4",
+ "typescript": "^4.8.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+chai-as-promised@8.0.2/node_modules/@types/chai-as-promised": {
+ "version": "8.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+debug@4.1.12/node_modules/@types/debug": {
+ "version": "4.1.12",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+eslint-config-prettier@6.11.3/node_modules/@types/eslint-config-prettier": {
+ "version": "6.11.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint": {
+ "version": "9.6.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+estree@1.0.7/node_modules/@types/estree": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+express-serve-static-core@5.0.6/node_modules/@types/express-serve-static-core": {
+ "version": "5.0.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+express@5.0.2/node_modules/@types/express": {
+ "version": "5.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^5.0.0",
+ "@types/serve-static": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra": {
+ "version": "11.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/jsonfile": "*",
+ "@types/node": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+is-buffer@2.0.2/node_modules/@types/is-buffer": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+jsonwebtoken@9.0.9/node_modules/@types/jsonwebtoken": {
+ "version": "9.0.9",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*",
+ "@types/node": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+minimist@1.2.5/node_modules/@types/minimist": {
+ "version": "1.2.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+ms@2.1.0/node_modules/@types/ms": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node": {
+ "version": "18.19.110",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+semver@7.7.0/node_modules/@types/semver": {
+ "version": "7.7.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+unzipper@0.10.11/node_modules/@types/unzipper": {
+ "version": "0.10.11",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+ws@7.4.7/node_modules/@types/ws": {
+ "version": "7.4.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws": {
+ "version": "8.18.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.26.1_@typescript-eslint+parser@8.26.1_eslint@9.28.0_typesc_cpt2wfi56j2kmlqfdpy32xzd7a/node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.26.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.26.1",
+ "@typescript-eslint/type-utils": "8.26.1",
+ "@typescript-eslint/utils": "8.26.1",
+ "@typescript-eslint/visitor-keys": "8.26.1",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "devDependencies": {
+ "@jest/types": "29.6.3",
+ "@types/marked": "^5.0.2",
+ "@types/mdast": "^4.0.3",
+ "@types/natural-compare": "*",
+ "@typescript-eslint/rule-schema-to-typescript-types": "8.26.1",
+ "@typescript-eslint/rule-tester": "8.26.1",
+ "ajv": "^6.12.6",
+ "cross-env": "^7.0.3",
+ "cross-fetch": "*",
+ "eslint": "*",
+ "jest": "29.7.0",
+ "jest-specific-snapshot": "^8.0.0",
+ "json-schema": "*",
+ "markdown-table": "^3.0.3",
+ "marked": "^5.1.2",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-mdx": "^3.0.0",
+ "micromark-extension-mdxjs": "^3.0.0",
+ "prettier": "^3.2.5",
+ "rimraf": "*",
+ "title-case": "^3.0.3",
+ "tsx": "*",
+ "typescript": "*",
+ "unist-util-visit": "^5.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+parser@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/@typescript-eslint/parser": {
+ "version": "8.26.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.26.1",
+ "@typescript-eslint/types": "8.26.1",
+ "@typescript-eslint/typescript-estree": "8.26.1",
+ "@typescript-eslint/visitor-keys": "8.26.1",
+ "debug": "^4.3.4"
+ },
+ "devDependencies": {
+ "@jest/types": "29.6.3",
+ "downlevel-dts": "*",
+ "glob": "*",
+ "jest": "29.7.0",
+ "prettier": "^3.2.5",
+ "rimraf": "*",
+ "typescript": "*"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+rule-tester@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/@typescript-eslint/rule-tester": {
+ "version": "8.26.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/parser": "8.26.1",
+ "@typescript-eslint/typescript-estree": "8.26.1",
+ "@typescript-eslint/utils": "8.26.1",
+ "ajv": "^6.12.6",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "4.6.2",
+ "semver": "^7.6.0"
+ },
+ "devDependencies": {
+ "@jest/types": "29.6.3",
+ "@types/json-stable-stringify-without-jsonify": "^1.0.2",
+ "@types/lodash.merge": "4.6.9",
+ "chai": "^4.4.1",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esprima": "^4.0.1",
+ "mocha": "^10.4.0",
+ "sinon": "^16.1.3",
+ "source-map-support": "^0.5.21",
+ "typescript": "*"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+typescript-estree@8.26.1_typescript@5.8.3/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.26.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.26.1",
+ "@typescript-eslint/visitor-keys": "8.26.1",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "devDependencies": {
+ "@jest/types": "29.6.3",
+ "glob": "*",
+ "jest": "29.7.0",
+ "prettier": "^3.2.5",
+ "rimraf": "*",
+ "tmp": "*",
+ "typescript": "*"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+utils@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/@typescript-eslint/utils": {
+ "version": "8.26.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.26.1",
+ "@typescript-eslint/types": "8.26.1",
+ "@typescript-eslint/typescript-estree": "8.26.1"
+ },
+ "devDependencies": {
+ "downlevel-dts": "*",
+ "jest": "29.7.0",
+ "prettier": "^3.2.5",
+ "rimraf": "*",
+ "typescript": "*"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@testing-library/dom": "^10.4.0",
+ "@testing-library/user-event": "^14.6.1",
+ "@vitest/mocker": "3.2.0",
+ "@vitest/utils": "3.2.0",
+ "magic-string": "^0.30.17",
+ "sirv": "^3.0.1",
+ "tinyrainbow": "^2.0.0",
+ "ws": "^8.18.2"
+ },
+ "devDependencies": {
+ "@types/ws": "^8.18.1",
+ "@vitest/runner": "3.2.0",
+ "@vitest/ui": "3.2.0",
+ "@vitest/ws-client": "3.2.0",
+ "@wdio/protocols": "^9.15.0",
+ "@wdio/types": "^9.15.0",
+ "birpc": "2.3.0",
+ "flatted": "^3.3.3",
+ "ivya": "^1.6.0",
+ "mime": "^4.0.7",
+ "pathe": "^2.0.3",
+ "periscopic": "^4.0.2",
+ "playwright": "^1.52.0",
+ "playwright-core": "^1.52.0",
+ "safaridriver": "^1.0.0",
+ "vitest": "3.2.0",
+ "webdriverio": "^9.15.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "playwright": "*",
+ "vitest": "3.2.0",
+ "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "playwright": {
+ "optional": true
+ },
+ "safaridriver": {
+ "optional": true
+ },
+ "webdriverio": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.3",
+ "debug": "^4.4.1",
+ "istanbul-lib-coverage": "^3.2.2",
+ "istanbul-lib-instrument": "^6.0.3",
+ "istanbul-lib-report": "^3.0.1",
+ "istanbul-lib-source-maps": "^5.0.6",
+ "istanbul-reports": "^3.1.7",
+ "magicast": "^0.3.5",
+ "test-exclude": "^7.0.1",
+ "tinyrainbow": "^2.0.0"
+ },
+ "devDependencies": {
+ "@types/debug": "^4.1.12",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-lib-instrument": "^1.7.7",
+ "@types/istanbul-lib-report": "^3.0.3",
+ "@types/istanbul-lib-source-maps": "^4.0.4",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/test-exclude": "^6.0.2",
+ "pathe": "^2.0.3",
+ "vitest": "3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "vitest": "3.2.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+expect@3.2.0/node_modules/@vitest/expect": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "3.2.0",
+ "@vitest/utils": "3.2.0",
+ "chai": "^5.2.0",
+ "tinyrainbow": "^2.0.0"
+ },
+ "devDependencies": {
+ "@vitest/runner": "3.2.0",
+ "rollup-plugin-copy": "^3.5.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/autorest@3.7.2/node_modules/autorest": {
+ "version": "3.7.2",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "autorest": "entrypoints/app.js"
+ },
+ "devDependencies": {
+ "@autorest/common": "~1.6.1",
+ "@autorest/configuration": "~1.12.2",
+ "@autorest/core": "~3.10.6",
+ "@azure-tools/async-io": "~3.0.0",
+ "@azure-tools/extension": "~3.7.2",
+ "@azure-tools/tasks": "~3.0.0",
+ "@azure-tools/uri": "~3.1.1",
+ "@types/commonmark": "^0.27.0",
+ "@types/jest": "^29.5.14",
+ "@types/node": "~22.15.19",
+ "@types/semver": "7.7.0",
+ "@types/source-map-support": "^0.5.3",
+ "@types/webpack": "~5.28.5",
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
+ "@typescript-eslint/parser": "^8.32.1",
+ "chalk": "^4.1.0",
+ "copy-webpack-plugin": "^13.0.0",
+ "cpy-cli": "~5.0.0",
+ "eslint": "^8.28.0",
+ "eslint-plugin-import": "~2.31.0",
+ "eslint-plugin-jest": "~28.11.0",
+ "eslint-plugin-node": "~11.1.0",
+ "eslint-plugin-prettier": "~5.4.0",
+ "eslint-plugin-unicorn": "~49.0.0",
+ "jest": "^29.3.1",
+ "mkdirp": "~3.0.1",
+ "prettier": "~3.5.3",
+ "rimraf": "^6.0.1",
+ "safe-buffer": "5.2.1",
+ "semver": "^7.7.2",
+ "source-map": "^0.8.0-beta.0",
+ "source-map-support": "^0.5.19",
+ "ts-jest": "^29.3.4",
+ "ts-loader": "~9.5.2",
+ "typescript": "~5.8.3",
+ "untildify": "^4.0.0",
+ "webpack": "~5.99.8",
+ "webpack-cli": "~6.0.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer": {
+ "version": "6.0.3",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ },
+ "devDependencies": {
+ "airtap": "^3.0.0",
+ "benchmark": "^2.1.4",
+ "browserify": "^17.0.0",
+ "concat-stream": "^2.0.0",
+ "hyperquest": "^2.1.3",
+ "is-buffer": "^2.0.5",
+ "is-nan": "^1.3.0",
+ "split": "^1.0.1",
+ "standard": "*",
+ "tape": "^5.0.1",
+ "through2": "^4.0.2",
+ "uglify-js": "^3.11.5"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/builtin-modules@3.3.0/node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "devDependencies": {
+ "ava": "^1.4.1",
+ "tsd": "^0.7.2",
+ "xo": "^0.24.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chai-as-promised@8.0.1_chai@5.2.0/node_modules/chai-as-promised": {
+ "version": "8.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "check-error": "^2.0.0"
+ },
+ "devDependencies": {
+ "c8": "^9.1.0",
+ "chai": "^5.1.0",
+ "eslint": "^8.57.0",
+ "mocha": "^10.4.0",
+ "prettier": "^3.2.5"
+ },
+ "peerDependencies": {
+ "chai": ">= 2.1.2 < 6"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chai-exclude@3.0.1_chai@5.2.0/node_modules/chai-exclude": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fclone": "^1.0.11"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.3.16",
+ "chai": "^5.1.1",
+ "mocha": "^10.6.0",
+ "standard": "^17.0.0"
+ },
+ "peerDependencies": {
+ "chai": ">= 5"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chai@5.2.0/node_modules/chai": {
+ "version": "5.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.17.0",
+ "@rollup/plugin-commonjs": "^25.0.7",
+ "@web/dev-server-rollup": "^0.6.1",
+ "@web/test-runner": "^0.18.0",
+ "@web/test-runner-playwright": "^0.11.0",
+ "c8": "^10.1.3",
+ "esbuild": "^0.19.10",
+ "eslint": "^8.56.0",
+ "eslint-plugin-jsdoc": "^48.0.4",
+ "mocha": "^10.2.0",
+ "prettier": "^3.4.2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chalk@4.1.2/node_modules/chalk": {
+ "version": "4.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "devDependencies": {
+ "ava": "^2.4.0",
+ "coveralls": "^3.0.7",
+ "execa": "^4.0.0",
+ "import-fresh": "^3.1.0",
+ "matcha": "^0.7.0",
+ "nyc": "^15.0.0",
+ "resolve-from": "^5.0.0",
+ "tsd": "^0.7.4",
+ "xo": "^0.28.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/concurrently@8.2.2/node_modules/concurrently": {
+ "version": "8.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "date-fns": "^2.30.0",
+ "lodash": "^4.17.21",
+ "rxjs": "^7.8.1",
+ "shell-quote": "^1.8.1",
+ "spawn-command": "0.0.2",
+ "supports-color": "^8.1.1",
+ "tree-kill": "^1.2.2",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "devDependencies": {
+ "@hirez_io/observer-spy": "^2.2.0",
+ "@swc/core": "^1.3.93",
+ "@swc/jest": "^0.2.29",
+ "@types/jest": "^29.5.6",
+ "@types/lodash": "^4.14.200",
+ "@types/node": "^14.18.62",
+ "@types/shell-quote": "^1.7.3",
+ "@types/supports-color": "^8.1.2",
+ "@types/yargs": "^17.0.29",
+ "@typescript-eslint/eslint-plugin": "^6.8.0",
+ "@typescript-eslint/parser": "^6.8.0",
+ "coveralls-next": "^4.2.0",
+ "ctrlc-wrapper": "^0.0.4",
+ "esbuild": "~0.19.5",
+ "eslint": "^8.51.0",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-plugin-import": "^2.28.1",
+ "eslint-plugin-jest": "^27.4.2",
+ "eslint-plugin-prettier": "^5.0.1",
+ "eslint-plugin-simple-import-sort": "^10.0.0",
+ "husky": "^8.0.3",
+ "jest": "^29.7.0",
+ "jest-create-mock-instance": "^2.0.0",
+ "lint-staged": "^13.3.0",
+ "prettier": "^3.0.3",
+ "safe-publish-latest": "^2.0.0",
+ "string-argv": "^0.3.2",
+ "typescript": "~5.2.2"
+ },
+ "engines": {
+ "node": "^14.13.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/cross-env@7.0.3/node_modules/cross-env": {
+ "version": "7.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.1"
+ },
+ "bin": {
+ "cross-env": "src/bin/cross-env.js",
+ "cross-env-shell": "src/bin/cross-env-shell.js"
+ },
+ "devDependencies": {
+ "kcd-scripts": "^5.5.0"
+ },
+ "engines": {
+ "node": ">=10.14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/debug@4.4.1/node_modules/debug": {
+ "version": "4.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "devDependencies": {
+ "brfs": "^2.0.1",
+ "browserify": "^16.2.3",
+ "coveralls": "^3.0.2",
+ "karma": "^3.1.4",
+ "karma-browserify": "^6.0.0",
+ "karma-chrome-launcher": "^2.2.0",
+ "karma-mocha": "^1.3.0",
+ "mocha": "^5.2.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "sinon": "^14.0.0",
+ "xo": "^0.23.0"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv": {
+ "version": "16.5.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "devDependencies": {
+ "@types/node": "^18.11.3",
+ "decache": "^4.6.2",
+ "sinon": "^14.0.1",
+ "standard": "^17.0.0",
+ "standard-version": "^9.5.0",
+ "tap": "^19.2.0",
+ "typescript": "^4.8.4"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-config-prettier@10.1.5_eslint@9.28.0/node_modules/eslint-config-prettier": {
+ "version": "10.1.5",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-config-prettier"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-n@17.19.0_eslint@9.28.0_typescript@5.8.3/node_modules/eslint-plugin-n": {
+ "version": "17.19.0",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.5.0",
+ "@typescript-eslint/utils": "^8.26.1",
+ "enhanced-resolve": "^5.17.1",
+ "eslint-plugin-es-x": "^7.8.0",
+ "get-tsconfig": "^4.8.1",
+ "globals": "^15.11.0",
+ "ignore": "^5.3.2",
+ "minimatch": "^9.0.5",
+ "semver": "^7.6.3",
+ "ts-declaration-location": "^1.0.6"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.14.0",
+ "@types/eslint": "^9.6.1",
+ "@types/estree": "^1.0.6",
+ "@types/node": "^20.17.5",
+ "@typescript-eslint/parser": "^8.26.1",
+ "@typescript-eslint/typescript-estree": "^8.26.1",
+ "eslint": "^9.14.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-doc-generator": "^1.7.1",
+ "eslint-plugin-eslint-plugin": "^6.3.1",
+ "eslint-plugin-n": "file:.",
+ "fast-glob": "^3.3.2",
+ "husky": "^9.1.6",
+ "lint-staged": "^15.2.10",
+ "markdownlint-cli": "^0.42.0",
+ "mocha": "^10.8.2",
+ "npm-run-all2": "^6.2.6",
+ "nyc": "^17.1.0",
+ "opener": "^1.5.2",
+ "prettier": "^3.3.3",
+ "punycode": "^2.3.1",
+ "release-it": "^17.10.0",
+ "rimraf": "^5.0.10",
+ "ts-ignore-import": "^4.0.1",
+ "type-fest": "^4.26.1",
+ "typescript": "~5.6"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.23.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-no-only-tests@3.3.0/node_modules/eslint-plugin-no-only-tests": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "devDependencies": {
+ "@biomejs/biome": "^1.8.3",
+ "@types/eslint": "^9.6.0",
+ "@types/eslint__js": "^8.42.3",
+ "@types/node": "^22.3.0",
+ "eslint": ">=9.0.0",
+ "typescript": "^5.5.4"
+ },
+ "engines": {
+ "node": ">=5.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-promise@7.2.1_eslint@9.28.0/node_modules/eslint-plugin-promise": {
+ "version": "7.2.1",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0"
+ },
+ "devDependencies": {
+ "@typescript-eslint/parser": "^7.17.0",
+ "doctoc": "^2.2.1",
+ "eslint": "^8.56.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-doc-generator": "^1.7.1",
+ "eslint-plugin-eslint-plugin": "^6.2.0",
+ "eslint-plugin-jest": "^28.6.0",
+ "eslint-plugin-n": "^17.9.0",
+ "eslint-plugin-prettier": "^5.2.1",
+ "globals": "^15.8.0",
+ "husky": "^9.1.1",
+ "jest": "^29.7.0",
+ "lint-staged": "^15.2.7",
+ "npm-run-all2": "^6.2.2",
+ "prettier": "^3.3.3",
+ "typescript": "~5.6.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-tsdoc@0.4.0/node_modules/eslint-plugin-tsdoc": {
+ "version": "0.4.0",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@microsoft/tsdoc": "0.15.1",
+ "@microsoft/tsdoc-config": "0.17.1"
+ },
+ "devDependencies": {
+ "@rushstack/heft": "^0.66.13",
+ "@rushstack/heft-node-rig": "~2.6.11",
+ "@types/eslint": "8.40.1",
+ "@types/estree": "1.0.1",
+ "@types/heft-jest": "1.0.3",
+ "@types/node": "14.18.36",
+ "eslint": "~8.57.0",
+ "eslint-plugin-header": "~3.1.1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint": {
+ "version": "9.28.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.14.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.28.0",
+ "@eslint/plugin-kit": "^0.3.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "devDependencies": {
+ "@arethetypeswrong/cli": "^0.18.0",
+ "@babel/core": "^7.4.3",
+ "@babel/preset-env": "^7.4.3",
+ "@cypress/webpack-preprocessor": "^6.0.2",
+ "@eslint/json": "^0.12.0",
+ "@trunkio/launcher": "^1.3.4",
+ "@types/esquery": "^1.5.4",
+ "@types/node": "^22.13.14",
+ "@typescript-eslint/parser": "^8.4.0",
+ "babel-loader": "^8.0.5",
+ "c8": "^7.12.0",
+ "chai": "^4.0.1",
+ "cheerio": "^0.22.0",
+ "common-tags": "^1.8.0",
+ "core-js": "^3.1.3",
+ "cypress": "^14.1.0",
+ "ejs": "^3.0.2",
+ "eslint": "file:.",
+ "eslint-config-eslint": "file:packages/eslint-config-eslint",
+ "eslint-plugin-eslint-plugin": "^6.0.0",
+ "eslint-plugin-expect-type": "^0.6.0",
+ "eslint-plugin-yml": "^1.14.0",
+ "eslint-release": "^3.3.0",
+ "eslint-rule-composer": "^0.3.0",
+ "eslump": "^3.0.0",
+ "esprima": "^4.0.1",
+ "fast-glob": "^3.2.11",
+ "fs-teardown": "^0.1.3",
+ "glob": "^10.0.0",
+ "globals": "^16.2.0",
+ "got": "^11.8.3",
+ "gray-matter": "^4.0.3",
+ "jiti": "^2.2.0",
+ "jiti-v2.0": "npm:jiti@2.0.x",
+ "jiti-v2.1": "npm:jiti@2.1.x",
+ "knip": "^5.32.0",
+ "lint-staged": "^11.0.0",
+ "load-perf": "^0.2.0",
+ "markdown-it": "^12.2.0",
+ "markdown-it-container": "^3.0.0",
+ "marked": "^4.0.8",
+ "metascraper": "^5.25.7",
+ "metascraper-description": "^5.25.7",
+ "metascraper-image": "^5.29.3",
+ "metascraper-logo": "^5.25.7",
+ "metascraper-logo-favicon": "^5.25.7",
+ "metascraper-title": "^5.25.7",
+ "mocha": "^10.7.3",
+ "node-polyfill-webpack-plugin": "^1.0.3",
+ "npm-license": "^0.3.3",
+ "pirates": "^4.0.5",
+ "progress": "^2.0.3",
+ "proxyquire": "^2.0.1",
+ "recast": "^0.23.0",
+ "regenerator-runtime": "^0.14.0",
+ "semver": "^7.5.3",
+ "shelljs": "^0.10.0",
+ "sinon": "^11.0.0",
+ "typescript": "^5.3.3",
+ "webpack": "^5.23.0",
+ "webpack-cli": "^4.5.0",
+ "yorkie": "^2.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/events@3.3.0/node_modules/events": {
+ "version": "3.3.0",
+ "license": "MIT",
+ "devDependencies": {
+ "airtap": "^1.0.0",
+ "functions-have-names": "^1.2.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "isarray": "^2.0.5",
+ "tape": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/express@4.21.2/node_modules/express": {
+ "version": "4.21.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.7.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.3.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.12",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.13.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "devDependencies": {
+ "after": "0.8.2",
+ "connect-redis": "3.4.2",
+ "cookie-parser": "1.4.6",
+ "cookie-session": "2.0.0",
+ "ejs": "3.1.9",
+ "eslint": "8.47.0",
+ "express-session": "1.17.2",
+ "hbs": "4.2.0",
+ "marked": "0.7.0",
+ "method-override": "3.0.0",
+ "mocha": "10.2.0",
+ "morgan": "1.10.0",
+ "nyc": "15.1.0",
+ "pbkdf2-password": "1.2.1",
+ "supertest": "6.3.0",
+ "vhost": "~3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/express@5.1.0/node_modules/express": {
+ "version": "5.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "^2.0.0",
+ "body-parser": "^2.2.0",
+ "content-disposition": "^1.0.0",
+ "content-type": "^1.0.5",
+ "cookie": "^0.7.1",
+ "cookie-signature": "^1.2.1",
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "finalhandler": "^2.1.0",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "merge-descriptors": "^2.0.0",
+ "mime-types": "^3.0.0",
+ "on-finished": "^2.4.1",
+ "once": "^1.4.0",
+ "parseurl": "^1.3.3",
+ "proxy-addr": "^2.0.7",
+ "qs": "^6.14.0",
+ "range-parser": "^1.2.1",
+ "router": "^2.2.0",
+ "send": "^1.1.0",
+ "serve-static": "^2.2.0",
+ "statuses": "^2.0.1",
+ "type-is": "^2.0.1",
+ "vary": "^1.1.2"
+ },
+ "devDependencies": {
+ "after": "0.8.2",
+ "connect-redis": "^8.0.1",
+ "cookie-parser": "1.4.7",
+ "cookie-session": "2.1.0",
+ "ejs": "^3.1.10",
+ "eslint": "8.47.0",
+ "express-session": "^1.18.1",
+ "hbs": "4.2.0",
+ "marked": "^15.0.3",
+ "method-override": "3.0.0",
+ "mocha": "^10.7.3",
+ "morgan": "1.10.0",
+ "nyc": "^17.1.0",
+ "pbkdf2-password": "1.2.1",
+ "supertest": "^6.3.0",
+ "vhost": "~3.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/fast-xml-parser@5.2.3/node_modules/fast-xml-parser": {
+ "version": "5.2.3",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "strnum": "^2.1.0"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.13.10",
+ "@babel/plugin-transform-runtime": "^7.13.10",
+ "@babel/preset-env": "^7.13.10",
+ "@babel/register": "^7.13.8",
+ "@types/node": "20",
+ "babel-loader": "^8.2.2",
+ "c8": "^10.1.3",
+ "eslint": "^8.3.0",
+ "he": "^1.2.0",
+ "jasmine": "^5.6.0",
+ "prettier": "^3.5.1",
+ "publish-please": "^5.5.2",
+ "typescript": "5",
+ "webpack": "^5.64.4",
+ "webpack-cli": "^4.9.1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/fs-extra@11.3.0/node_modules/fs-extra": {
+ "version": "11.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "devDependencies": {
+ "klaw": "^2.1.1",
+ "klaw-sync": "^3.0.2",
+ "minimist": "^1.1.1",
+ "mocha": "^10.1.0",
+ "nyc": "^15.0.0",
+ "proxyquire": "^2.0.1",
+ "read-dir-files": "^0.1.1",
+ "standard": "^17.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/glob@10.4.5/node_modules/glob": {
+ "version": "10.4.5",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "devDependencies": {
+ "@types/node": "^20.11.30",
+ "memfs": "^3.4.13",
+ "mkdirp": "^3.0.1",
+ "prettier": "^3.2.5",
+ "rimraf": "^5.0.7",
+ "sync-content": "^1.0.2",
+ "tap": "^19.0.0",
+ "tshy": "^1.14.0",
+ "typedoc": "^0.25.12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/http-proxy-agent@7.0.2/node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "devDependencies": {
+ "@types/debug": "^4.1.7",
+ "@types/jest": "^29.5.1",
+ "@types/node": "^14.18.45",
+ "async-listen": "^3.0.0",
+ "jest": "^29.5.0",
+ "proxy": "2.1.1",
+ "ts-jest": "^29.1.0",
+ "tsconfig": "0.0.0",
+ "typescript": "^5.0.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/https-proxy-agent@7.0.6/node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "devDependencies": {
+ "@types/async-retry": "^1.4.5",
+ "@types/debug": "4",
+ "@types/jest": "^29.5.1",
+ "@types/node": "^14.18.45",
+ "async-listen": "^3.0.0",
+ "async-retry": "^1.3.3",
+ "jest": "^29.5.0",
+ "proxy": "2.2.0",
+ "ts-jest": "^29.1.0",
+ "tsconfig": "0.0.0",
+ "typescript": "^5.0.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/inherits@2.0.4/node_modules/inherits": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "ISC",
+ "devDependencies": {
+ "tap": "^14.2.4"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/is-buffer@2.0.5/node_modules/is-buffer": {
+ "version": "2.0.5",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "devDependencies": {
+ "airtap": "^3.0.0",
+ "standard": "*",
+ "tape": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/jsonwebtoken@9.0.2/node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "devDependencies": {
+ "atob": "^2.1.2",
+ "chai": "^4.1.2",
+ "conventional-changelog": "~1.1.0",
+ "cost-of-modules": "^1.0.1",
+ "eslint": "^4.19.1",
+ "mocha": "^5.2.0",
+ "nsp": "^2.6.2",
+ "nyc": "^11.9.0",
+ "sinon": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/jssha@3.3.1/node_modules/jssha": {
+ "version": "3.3.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@rollup/plugin-terser": "^0.4.3",
+ "@rollup/plugin-typescript": "^11.1.2",
+ "@types/chai": "^4.3.5",
+ "@types/mocha": "^10.0.1",
+ "@types/rewire": "^2.5.28",
+ "@types/sinon": "^10.0.16",
+ "@typescript-eslint/eslint-plugin": "^6.2.1",
+ "@typescript-eslint/parser": "^6.2.1",
+ "chai": "^4.3.7",
+ "coveralls": "^3.1.1",
+ "eslint": "^8.46.0",
+ "husky": "^8.0.3",
+ "karma": "^6.4.2",
+ "karma-chai": "^0.1.0",
+ "karma-chrome-launcher": "^3.2.0",
+ "karma-firefox-launcher": "^2.1.2",
+ "karma-mocha": "^2.0.1",
+ "lint-staged": "^13.2.3",
+ "mocha": "^10.2.0",
+ "nyc": "^15.1.0",
+ "prettier": "^3.0.1",
+ "rewire": "^6.0.0",
+ "rollup": "^3.27.2",
+ "rollup-plugin-dts": "^5.3.1",
+ "sinon": "^15.2.0",
+ "ts-node": "^10.9.1",
+ "tslib": "^2.6.1",
+ "typescript": "^5.1.6"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/jwt-decode@4.0.0/node_modules/jwt-decode": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "devDependencies": {
+ "@babel/core": "7.23.2",
+ "@typescript-eslint/eslint-plugin": "^6.4.1",
+ "@typescript-eslint/parser": "^6.4.1",
+ "browser-sync": "^2.29.3",
+ "concurrently": "^8.2.0",
+ "eslint": "^8.48.0",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-import-resolver-typescript": "^3.6.0",
+ "eslint-plugin-import": "^2.28.1",
+ "eslint-plugin-prettier": "^5.0.0",
+ "husky": "^8.0.3",
+ "jest": "^29.7.0",
+ "jest-environment-jsdom": "^29.6.2",
+ "lint-staged": "^15.0.2",
+ "prettier": "^3.0.2",
+ "publint": "^0.2.2",
+ "shx": "^0.3.4",
+ "ts-jest": "^29.1.1",
+ "ts-node": "^10.9.1",
+ "typescript": "^5.1.6"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/long@5.3.2/node_modules/long": {
+ "version": "5.3.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "esm2umd": "^0.3.1",
+ "prettier": "^3.5.0",
+ "typescript": "^5.7.3"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/memfs@4.17.2/node_modules/memfs": {
+ "version": "4.17.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/json-pack": "^1.0.3",
+ "@jsonjoy.com/util": "^1.3.0",
+ "tree-dump": "^1.0.1",
+ "tslib": "^2.0.0"
+ },
+ "devDependencies": {
+ "@semantic-release/changelog": "^6.0.1",
+ "@semantic-release/git": "^10.0.1",
+ "@semantic-release/npm": "^9.0.1",
+ "@types/jest": "^29.0.0",
+ "@types/mime": "^3.0.0",
+ "@types/node": "^10.17.60",
+ "app-root-path": "^3.1.0",
+ "assert": "^2.0.0",
+ "buffer": "^6.0.3",
+ "html-webpack-plugin": "^5.5.3",
+ "husky": "^8.0.1",
+ "isomorphic-git": "^1.24.2",
+ "jest": "^29.0.0",
+ "path-browserify": "^1.0.1",
+ "prettier": "^3.0.0",
+ "process": "^0.11.10",
+ "readable-stream": "^4.4.0",
+ "rimraf": "^5.0.0",
+ "semantic-release": "^19.0.3",
+ "tar-stream": "^3.1.2",
+ "ts-jest": "^29.1.0",
+ "ts-loader": "^9.4.3",
+ "ts-node": "^10.9.1",
+ "tslint": "^6.1.3",
+ "tslint-config-common": "^1.6.2",
+ "typescript": "^5.1.3",
+ "url": "^0.11.1",
+ "util": "^0.12.5",
+ "webpack": "^5.87.0",
+ "webpack-cli": "^5.1.4",
+ "webpack-dev-server": "^4.15.1"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/minimist@1.2.8/node_modules/minimist": {
+ "version": "1.2.8",
+ "dev": true,
+ "license": "MIT",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^21.0.1",
+ "aud": "^2.0.2",
+ "auto-changelog": "^2.4.0",
+ "eslint": "=8.8.0",
+ "in-publish": "^2.0.1",
+ "npmignore": "^0.3.0",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^2.0.0",
+ "tape": "^5.6.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/mkdirp@3.0.1/node_modules/mkdirp": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "devDependencies": {
+ "@types/brace-expansion": "^1.1.0",
+ "@types/node": "^18.11.9",
+ "@types/tap": "^15.0.7",
+ "c8": "^7.12.0",
+ "eslint-config-prettier": "^8.6.0",
+ "prettier": "^2.8.2",
+ "tap": "^16.3.3",
+ "ts-node": "^10.9.1",
+ "typedoc": "^0.23.21",
+ "typescript": "^4.9.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/mockdate@3.0.5/node_modules/mockdate": {
+ "version": "3.0.5",
+ "dev": true,
+ "license": "MIT",
+ "devDependencies": {
+ "mocha": "7.1.2",
+ "rollup": "2.42.4",
+ "rollup-plugin-typescript2": "0.30.0",
+ "should": "13.2.3",
+ "typescript": "3.9.3"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/ms@2.1.3/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT",
+ "devDependencies": {
+ "eslint": "4.18.2",
+ "expect.js": "0.3.1",
+ "husky": "0.14.3",
+ "lint-staged": "5.0.0",
+ "mocha": "4.0.1",
+ "prettier": "2.0.5"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/nock@14.0.1/node_modules/nock": {
+ "version": "14.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@mswjs/interceptors": "^0.37.3",
+ "json-stringify-safe": "^5.0.1",
+ "propagate": "^2.0.0"
+ },
+ "devDependencies": {
+ "@definitelytyped/dtslint": "^0.0.163",
+ "@sinonjs/fake-timers": "^11.2.2",
+ "assert-rejects": "^1.0.0",
+ "chai": "^4.1.2",
+ "dirty-chai": "^2.0.1",
+ "eslint": "^8.8.0",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-config-standard": "^17.0.0-0",
+ "eslint-plugin-import": "^2.16.0",
+ "eslint-plugin-mocha": "^10.0.3",
+ "eslint-plugin-node": "^11.0.0",
+ "eslint-plugin-promise": "^6.0.0",
+ "form-data": "^4.0.0",
+ "got": "^11.3.0",
+ "jest": "^29.7.0",
+ "mocha": "^9.1.3",
+ "npm-run-all": "^4.1.5",
+ "nyc": "^15.0.0",
+ "prettier": "3.2.5",
+ "proxyquire": "^2.1.0",
+ "rimraf": "^3.0.0",
+ "semantic-release": "^24.1.0",
+ "sinon": "^17.0.1",
+ "sinon-chai": "^3.7.0",
+ "typescript": "^5.0.4"
+ },
+ "engines": {
+ "node": ">=18.20.0 <20 || >=20.12.1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/open@10.1.2/node_modules/open": {
+ "version": "10.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "default-browser": "^5.2.1",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^3.1.0"
+ },
+ "devDependencies": {
+ "@types/node": "^20.10.5",
+ "ava": "^6.0.1",
+ "tsd": "^0.30.1",
+ "xo": "^0.56.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright": {
+ "version": "1.52.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.52.0"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/prettier@3.5.3/node_modules/prettier": {
+ "version": "3.5.3",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/process@0.11.10/node_modules/process": {
+ "version": "0.11.10",
+ "dev": true,
+ "license": "MIT",
+ "devDependencies": {
+ "mocha": "2.2.1",
+ "zuul": "^3.10.3"
+ },
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rhea-promise@3.0.3/node_modules/rhea-promise": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "debug": "^4.0.0",
+ "rhea": "^3.0.0",
+ "tslib": "^2.6.0"
+ },
+ "devDependencies": {
+ "@azure/abort-controller": "^1.0.1",
+ "@types/chai": "^4.3.7",
+ "@types/debug": "^4.0.0",
+ "@types/mocha": "^10.0.0",
+ "@types/node": "^16.0.0",
+ "@typescript-eslint/eslint-plugin": "~7.8.0",
+ "@typescript-eslint/parser": "~7.8.0",
+ "chai": "^4.3.10",
+ "dotenv": "^16.0.0",
+ "eslint": "^8.42.0",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-plugin-jsdoc": "^46.2.6",
+ "mocha": "^10.0.0",
+ "rimraf": "^5.0.5",
+ "ts-node": "^10.0.0",
+ "typescript": "~5.0.4"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rhea@3.0.4/node_modules/rhea": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "debug": "^4.3.3"
+ },
+ "devDependencies": {
+ "@types/debug": "^4.1.7",
+ "@types/mocha": "^9.0.0",
+ "@types/node": "10 -",
+ "browserify": "",
+ "eslint": "^7.32.0",
+ "minimist": ">=0.2.4",
+ "mocha": "^9.1.4",
+ "nyc": "^15.1.0",
+ "require-self": "^0.2.1",
+ "ts-node": "^10.4.0",
+ "typescript": "^4.5.5",
+ "uglify-js": ">=2.4.24",
+ "ws": "^6.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rimraf@5.0.10/node_modules/rimraf": {
+ "version": "5.0.10",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^10.3.7"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "devDependencies": {
+ "@types/node": "^20.12.11",
+ "mkdirp": "^3.0.1",
+ "prettier": "^3.2.5",
+ "tap": "^19.0.1",
+ "tshy": "^1.14.0",
+ "typedoc": "^0.25.13",
+ "typescript": "^5.4.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/semver@7.7.2/node_modules/semver": {
+ "version": "7.7.2",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "devDependencies": {
+ "@npmcli/eslint-config": "^5.0.0",
+ "@npmcli/template-oss": "4.24.3",
+ "benchmark": "^2.1.4",
+ "tap": "^16.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/strip-json-comments@5.0.2/node_modules/strip-json-comments": {
+ "version": "5.0.2",
+ "dev": true,
+ "license": "MIT",
+ "devDependencies": {
+ "ava": "^4.3.1",
+ "matcha": "^0.7.0",
+ "tsd": "^0.22.0",
+ "xo": "^0.54.2"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tar@7.4.3/node_modules/tar": {
+ "version": "7.4.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.0.1",
+ "mkdirp": "^3.0.1",
+ "yallist": "^5.0.0"
+ },
+ "devDependencies": {
+ "chmodr": "^1.2.0",
+ "end-of-stream": "^1.4.3",
+ "events-to-array": "^2.0.3",
+ "mutate-fs": "^2.1.1",
+ "nock": "^13.5.4",
+ "prettier": "^3.2.5",
+ "rimraf": "^5.0.5",
+ "tap": "^18.7.2",
+ "tshy": "^1.13.1",
+ "typedoc": "^0.25.13"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/ts-morph@26.0.0/node_modules/ts-morph": {
+ "version": "26.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ts-morph/common": "~0.27.0",
+ "code-block-writer": "^13.0.3"
+ },
+ "devDependencies": {
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/chai": "^5.2.1",
+ "@types/diff": "^7.0.2",
+ "@types/mocha": "^10.0.10",
+ "@types/node": "^22.14.1",
+ "chai": "^5.2.0",
+ "conditional-type-checks": "^1.0.6",
+ "cross-env": "^7.0.3",
+ "diff": "^7.0.0",
+ "mocha": "11.1.0",
+ "rimraf": "^6.0.1",
+ "rollup": "=4.40.0",
+ "standard-version": "^9.5.0",
+ "ts-node": "10.9.2",
+ "typescript": "~5.8.3"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tshy@2.0.1/node_modules/tshy": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "chokidar": "^3.6.0",
+ "foreground-child": "^3.1.1",
+ "minimatch": "^9.0.4",
+ "mkdirp": "^3.0.1",
+ "polite-json": "^5.0.0",
+ "resolve-import": "^1.4.5",
+ "rimraf": "^5.0.1",
+ "sync-content": "^1.0.2",
+ "typescript": "5",
+ "walk-up-path": "^3.0.1"
+ },
+ "bin": {
+ "tshy": "dist/esm/index.js"
+ },
+ "devDependencies": {
+ "@types/node": "^20.12.7",
+ "prettier": "^3.3.2",
+ "tap": "^19.2.1",
+ "typedoc": "^0.26.2"
+ },
+ "engines": {
+ "node": "16 >=16.17 || 18 >=18.15.0 || >=20.6.1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib": {
+ "version": "2.8.1",
+ "license": "0BSD"
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tsx@4.19.3/node_modules/tsx": {
+ "version": "4.19.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.25.0",
+ "get-tsconfig": "^4.7.5"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tsx@4.19.4/node_modules/tsx": {
+ "version": "4.19.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.25.0",
+ "get-tsconfig": "^4.7.5"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript-eslint@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/typescript-eslint": {
+ "version": "8.26.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.26.1",
+ "@typescript-eslint/parser": "8.26.1",
+ "@typescript-eslint/utils": "8.26.1"
+ },
+ "devDependencies": {
+ "@jest/types": "29.6.3",
+ "downlevel-dts": "*",
+ "jest": "29.7.0",
+ "prettier": "^3.2.5",
+ "rimraf": "*",
+ "typescript": "*"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@4.2.4/node_modules/typescript": {
+ "version": "4.2.4",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "devDependencies": {
+ "@octokit/rest": "latest",
+ "@types/browserify": "latest",
+ "@types/chai": "latest",
+ "@types/convert-source-map": "latest",
+ "@types/glob": "latest",
+ "@types/gulp": "^4.0.5",
+ "@types/gulp-concat": "latest",
+ "@types/gulp-newer": "latest",
+ "@types/gulp-rename": "0.0.33",
+ "@types/gulp-sourcemaps": "0.0.32",
+ "@types/jake": "latest",
+ "@types/merge2": "latest",
+ "@types/microsoft__typescript-etw": "latest",
+ "@types/minimatch": "latest",
+ "@types/minimist": "latest",
+ "@types/mkdirp": "latest",
+ "@types/mocha": "latest",
+ "@types/ms": "latest",
+ "@types/node": "latest",
+ "@types/node-fetch": "^2.3.4",
+ "@types/q": "latest",
+ "@types/source-map-support": "latest",
+ "@types/through2": "latest",
+ "@types/xml2js": "^0.4.0",
+ "@typescript-eslint/eslint-plugin": "4.5.0",
+ "@typescript-eslint/experimental-utils": "4.5.0",
+ "@typescript-eslint/parser": "4.5.0",
+ "async": "latest",
+ "azure-devops-node-api": "^10.1.0",
+ "browser-resolve": "^1.11.2",
+ "browserify": "latest",
+ "chai": "latest",
+ "chalk": "latest",
+ "convert-source-map": "latest",
+ "del": "5.1.0",
+ "diff": "^4.0.2",
+ "eslint": "7.12.1",
+ "eslint-formatter-autolinkable-stylish": "1.1.4",
+ "eslint-plugin-import": "2.22.1",
+ "eslint-plugin-jsdoc": "30.7.6",
+ "eslint-plugin-no-null": "1.0.2",
+ "fancy-log": "latest",
+ "fs-extra": "^9.0.0",
+ "glob": "latest",
+ "gulp": "^4.0.0",
+ "gulp-concat": "latest",
+ "gulp-insert": "latest",
+ "gulp-newer": "latest",
+ "gulp-rename": "latest",
+ "gulp-sourcemaps": "latest",
+ "istanbul": "latest",
+ "merge2": "latest",
+ "minimist": "latest",
+ "mkdirp": "latest",
+ "mocha": "latest",
+ "mocha-fivemat-progress-reporter": "latest",
+ "ms": "latest",
+ "node-fetch": "^2.6.0",
+ "plugin-error": "latest",
+ "pretty-hrtime": "^1.0.3",
+ "prex": "^0.4.3",
+ "q": "latest",
+ "remove-internal": "^2.9.2",
+ "source-map-support": "latest",
+ "through2": "latest",
+ "typescript": "^4.0.0-dev.20200624",
+ "vinyl": "latest",
+ "vinyl-sourcemaps-apply": "latest",
+ "xml2js": "^0.4.19"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript": {
+ "version": "5.8.3",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "devDependencies": {
+ "@dprint/formatter": "^0.4.1",
+ "@dprint/typescript": "0.93.3",
+ "@esfx/canceltoken": "^1.0.0",
+ "@eslint/js": "^9.17.0",
+ "@octokit/rest": "^21.0.2",
+ "@types/chai": "^4.3.20",
+ "@types/diff": "^5.2.3",
+ "@types/minimist": "^1.2.5",
+ "@types/mocha": "^10.0.10",
+ "@types/ms": "^0.7.34",
+ "@types/node": "latest",
+ "@types/source-map-support": "^0.5.10",
+ "@types/which": "^3.0.4",
+ "@typescript-eslint/rule-tester": "^8.18.1",
+ "@typescript-eslint/type-utils": "^8.18.1",
+ "@typescript-eslint/utils": "^8.18.1",
+ "azure-devops-node-api": "^14.1.0",
+ "c8": "^10.1.3",
+ "chai": "^4.5.0",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.6.0",
+ "diff": "^5.2.0",
+ "dprint": "^0.47.6",
+ "esbuild": "^0.24.0",
+ "eslint": "^9.17.0",
+ "eslint-formatter-autolinkable-stylish": "^1.4.0",
+ "eslint-plugin-regexp": "^2.7.0",
+ "fast-xml-parser": "^4.5.1",
+ "glob": "^10.4.5",
+ "globals": "^15.13.0",
+ "hereby": "^1.10.0",
+ "jsonc-parser": "^3.3.1",
+ "knip": "^5.41.0",
+ "minimist": "^1.2.8",
+ "mocha": "^10.8.2",
+ "mocha-fivemat-progress-reporter": "^0.1.0",
+ "monocart-coverage-reports": "^2.11.4",
+ "ms": "^2.1.3",
+ "playwright": "^1.49.1",
+ "source-map-support": "^0.5.21",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2",
+ "typescript-eslint": "^8.18.1",
+ "which": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/unzipper@0.12.3/node_modules/unzipper": {
+ "version": "0.12.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bluebird": "~3.7.2",
+ "duplexer2": "~0.1.4",
+ "fs-extra": "^11.2.0",
+ "graceful-fs": "^4.2.2",
+ "node-int64": "^0.4.0"
+ },
+ "devDependencies": {
+ "@aws-sdk/client-s3": "^3.0.0",
+ "@eslint/js": "^9.2.0",
+ "aws-sdk": "^2.1636.0",
+ "dirdiff": ">= 0.0.1 < 1",
+ "eslint": "^9.2.0",
+ "globals": "^15.2.0",
+ "iconv-lite": "^0.4.24",
+ "request": "^2.88.0",
+ "stream-buffers": ">= 0.2.5 < 1",
+ "tap": "^16.3.10",
+ "temp": ">= 0.4.0 < 1"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/util@0.12.5/node_modules/util": {
+ "version": "0.12.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ },
+ "devDependencies": {
+ "airtap": "~1.0.0",
+ "core-js": "^3.6.5",
+ "is-async-supported": "~1.2.0",
+ "object.assign": "~4.1.0",
+ "object.entries": "^1.1.0",
+ "run-series": "~1.1.4",
+ "safe-buffer": "^5.1.2",
+ "tape": "~4.9.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.3_yaml@2.8.0/node_modules/vitest": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.0",
+ "@vitest/mocker": "3.2.0",
+ "@vitest/pretty-format": "^3.2.0",
+ "@vitest/runner": "3.2.0",
+ "@vitest/snapshot": "3.2.0",
+ "@vitest/spy": "3.2.0",
+ "@vitest/utils": "3.2.0",
+ "chai": "^5.2.0",
+ "debug": "^4.4.1",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.0",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.0",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "devDependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "@antfu/install-pkg": "^1.1.0",
+ "@edge-runtime/vm": "^5.0.0",
+ "@sinonjs/fake-timers": "14.0.0",
+ "@types/debug": "^4.1.12",
+ "@types/estree": "^1.0.7",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/jsdom": "^21.1.7",
+ "@types/mime": "^4.0.0",
+ "@types/node": "^22.15.29",
+ "@types/picomatch": "^4.0.0",
+ "@types/prompts": "^2.4.9",
+ "@types/sinonjs__fake-timers": "^8.1.5",
+ "acorn-walk": "^8.3.4",
+ "birpc": "2.3.0",
+ "cac": "^6.7.14",
+ "chai-subset": "^1.6.0",
+ "find-up": "^6.3.0",
+ "flatted": "^3.3.3",
+ "happy-dom": "^17.5.6",
+ "jsdom": "^26.1.0",
+ "local-pkg": "^1.1.1",
+ "mime": "^4.0.7",
+ "pretty-format": "^29.7.0",
+ "prompts": "^2.4.2",
+ "strip-literal": "^3.0.0",
+ "ws": "^8.18.2"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.2.0",
+ "@vitest/ui": "3.2.0",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/debug": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.0",
+ "@vitest/mocker": "3.2.0",
+ "@vitest/pretty-format": "^3.2.0",
+ "@vitest/runner": "3.2.0",
+ "@vitest/snapshot": "3.2.0",
+ "@vitest/spy": "3.2.0",
+ "@vitest/utils": "3.2.0",
+ "chai": "^5.2.0",
+ "debug": "^4.4.1",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.0",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.0",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "devDependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "@antfu/install-pkg": "^1.1.0",
+ "@edge-runtime/vm": "^5.0.0",
+ "@sinonjs/fake-timers": "14.0.0",
+ "@types/debug": "^4.1.12",
+ "@types/estree": "^1.0.7",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/jsdom": "^21.1.7",
+ "@types/mime": "^4.0.0",
+ "@types/node": "^22.15.29",
+ "@types/picomatch": "^4.0.0",
+ "@types/prompts": "^2.4.9",
+ "@types/sinonjs__fake-timers": "^8.1.5",
+ "acorn-walk": "^8.3.4",
+ "birpc": "2.3.0",
+ "cac": "^6.7.14",
+ "chai-subset": "^1.6.0",
+ "find-up": "^6.3.0",
+ "flatted": "^3.3.3",
+ "happy-dom": "^17.5.6",
+ "jsdom": "^26.1.0",
+ "local-pkg": "^1.1.1",
+ "mime": "^4.0.7",
+ "pretty-format": "^29.7.0",
+ "prompts": "^2.4.2",
+ "strip-literal": "^3.0.0",
+ "ws": "^8.18.2"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.2.0",
+ "@vitest/ui": "3.2.0",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/debug": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/ws@8.18.2/node_modules/ws": {
+ "version": "8.18.2",
+ "dev": true,
+ "license": "MIT",
+ "devDependencies": {
+ "benchmark": "^2.1.4",
+ "bufferutil": "^4.0.1",
+ "eslint": "^9.0.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-prettier": "^5.0.0",
+ "globals": "^16.0.0",
+ "mocha": "^8.4.0",
+ "nyc": "^15.0.0",
+ "prettier": "^3.0.0",
+ "utf-8-validate": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/yaml@2.8.0/node_modules/yaml": {
+ "version": "2.8.0",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.12.10",
+ "@babel/plugin-transform-typescript": "^7.12.17",
+ "@babel/preset-env": "^7.12.11",
+ "@eslint/js": "^9.9.1",
+ "@rollup/plugin-babel": "^6.0.3",
+ "@rollup/plugin-replace": "^5.0.2",
+ "@rollup/plugin-typescript": "^12.1.1",
+ "@types/jest": "^29.2.4",
+ "@types/node": "^20.11.20",
+ "babel-jest": "^29.0.1",
+ "cross-env": "^7.0.3",
+ "eslint": "^9.9.1",
+ "eslint-config-prettier": "^9.0.0",
+ "fast-check": "^2.12.0",
+ "jest": "^29.0.1",
+ "jest-ts-webcompat-resolver": "^1.0.0",
+ "prettier": "^3.0.2",
+ "rollup": "^4.12.0",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2",
+ "typescript-eslint": "^8.4.0"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ }
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool": {
+ "name": "@azure/dev-tool",
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@_ts/max": "npm:typescript@latest",
+ "@_ts/min": "npm:typescript@~4.2.4",
+ "@arethetypeswrong/cli": "^0.17.4",
+ "@azure/identity": "^4.9.0",
+ "@microsoft/api-extractor": "^7.52.4",
+ "@microsoft/api-extractor-model": "^7.30.5",
+ "chalk": "^4.1.1",
+ "concurrently": "^8.2.2",
+ "dotenv": "^16.0.0",
+ "express": "^5.1.0",
+ "fs-extra": "^11.2.0",
+ "memfs": "^4.14.1",
+ "minimist": "^1.2.8",
+ "prettier": "^3.3.3",
+ "semver": "^7.6.0",
+ "strip-json-comments": "^5.0.1",
+ "tar": "^7.4.3",
+ "ts-morph": "^26.0.0",
+ "tshy": "^2.0.0",
+ "tslib": "^2.8.1",
+ "tsx": "4.19.3",
+ "typescript": "~5.8.2",
+ "unzipper": "~0.12.3",
+ "yaml": "^2.3.4"
+ },
+ "bin": {
+ "dev-tool": "launch.js",
+ "dtx": "dtx.js"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.9.0",
+ "@types/express": "^5.0.1",
+ "@types/express-serve-static-core": "^5.0.6",
+ "@types/fs-extra": "^11.0.4",
+ "@types/minimist": "^1.2.5",
+ "@types/node": "^18.0.0",
+ "@types/semver": "^7.7.0",
+ "@types/unzipper": "~0.10.11",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "autorest": "^3.7.1",
+ "builtin-modules": "^3.1.0",
+ "cross-env": "^7.0.3",
+ "eslint": "^9.9.0",
+ "mkdirp": "^3.0.1",
+ "rimraf": "^5.0.5",
+ "typescript-eslint": "~8.26.0",
+ "vitest": "^3.0.9"
+ }
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@_ts/max": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@_ts/min": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@4.2.4/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@arethetypeswrong/cli": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@arethetypeswrong+cli@0.17.4/node_modules/@arethetypeswrong/cli",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@azure/identity": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+identity@4.10.0/node_modules/@azure/identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@eslint/js": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+js@9.28.0/node_modules/@eslint/js",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@microsoft/api-extractor": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@microsoft+api-extractor@7.52.8_@types+node@18.19.110/node_modules/@microsoft/api-extractor",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@microsoft/api-extractor-model": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@microsoft+api-extractor-model@7.30.6_@types+node@18.19.110/node_modules/@microsoft/api-extractor-model",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@types/express": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+express@5.0.2/node_modules/@types/express",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@types/express-serve-static-core": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+express-serve-static-core@5.0.6/node_modules/@types/express-serve-static-core",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@types/fs-extra": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@types/minimist": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+minimist@1.2.5/node_modules/@types/minimist",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@types/semver": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+semver@7.7.0/node_modules/@types/semver",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@types/unzipper": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+unzipper@0.10.11/node_modules/@types/unzipper",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/autorest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/autorest@3.7.2/node_modules/autorest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/builtin-modules": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/builtin-modules@3.3.0/node_modules/builtin-modules",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/chalk": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chalk@4.1.2/node_modules/chalk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/concurrently": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/concurrently@8.2.2/node_modules/concurrently",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/cross-env": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/cross-env@7.0.3/node_modules/cross-env",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/dotenv": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/express": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/express@5.1.0/node_modules/express",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/fs-extra": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/fs-extra@11.3.0/node_modules/fs-extra",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/memfs": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/memfs@4.17.2/node_modules/memfs",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/minimist": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/minimist@1.2.8/node_modules/minimist",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/mkdirp": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/mkdirp@3.0.1/node_modules/mkdirp",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/prettier": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/prettier@3.5.3/node_modules/prettier",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/rimraf": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rimraf@5.0.10/node_modules/rimraf",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/semver": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/semver@7.7.2/node_modules/semver",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/strip-json-comments": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/strip-json-comments@5.0.2/node_modules/strip-json-comments",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/tar": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tar@7.4.3/node_modules/tar",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/ts-morph": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/ts-morph@26.0.0/node_modules/ts-morph",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/tshy": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tshy@2.0.1/node_modules/tshy",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/tsx": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tsx@4.19.3/node_modules/tsx",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/typescript-eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript-eslint@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/typescript-eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/unzipper": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/unzipper@0.12.3/node_modules/unzipper",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.3_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/dev-tool/node_modules/yaml": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/yaml@2.8.0/node_modules/yaml",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk": {
+ "name": "@azure/eslint-plugin-azure-sdk",
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint/compat": "^1.2.4",
+ "@eslint/js": "^9.9.0",
+ "@types/eslint": "^9.6.0",
+ "@types/estree": "~1.0.0",
+ "@typescript-eslint/typescript-estree": "~8.26.0",
+ "eslint-config-prettier": "^10.0.1",
+ "glob": "^10.3.10",
+ "tslib": "^2.6.2",
+ "typescript": "~5.8.2",
+ "typescript-eslint": "~8.26.0"
+ },
+ "devDependencies": {
+ "@types/eslint": "^9.6.0",
+ "@types/eslint-config-prettier": "6.11.3",
+ "@types/node": "^18.0.0",
+ "@typescript-eslint/eslint-plugin": "~8.26.0",
+ "@typescript-eslint/parser": "~8.26.0",
+ "@typescript-eslint/rule-tester": "~8.26.0",
+ "@typescript-eslint/utils": "~8.26.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.49.1",
+ "prettier": "^3.3.3",
+ "rimraf": "^5.0.5",
+ "tshy": "^2.0.0",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@eslint/eslintrc": "^3.2.0",
+ "@typescript-eslint/eslint-plugin": "~8.26.0",
+ "@typescript-eslint/parser": "~8.26.0",
+ "eslint": "^9.9.0",
+ "eslint-plugin-n": "^17.15.0",
+ "eslint-plugin-no-only-tests": "^3.3.0",
+ "eslint-plugin-promise": "^7.2.1",
+ "eslint-plugin-tsdoc": "^0.4.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@eslint/compat": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+compat@1.2.9_eslint@9.28.0/node_modules/@eslint/compat",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@eslint/eslintrc": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+eslintrc@3.3.1/node_modules/@eslint/eslintrc",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@eslint/js": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+js@9.28.0/node_modules/@eslint/js",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@types/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@types/eslint-config-prettier": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+eslint-config-prettier@6.11.3/node_modules/@types/eslint-config-prettier",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@types/estree": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+estree@1.0.7/node_modules/@types/estree",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@typescript-eslint/eslint-plugin": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.26.1_@typescript-eslint+parser@8.26.1_eslint@9.28.0_typesc_cpt2wfi56j2kmlqfdpy32xzd7a/node_modules/@typescript-eslint/eslint-plugin",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@typescript-eslint/parser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+parser@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/@typescript-eslint/parser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@typescript-eslint/rule-tester": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+rule-tester@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/@typescript-eslint/rule-tester",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@typescript-eslint/typescript-estree": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+typescript-estree@8.26.1_typescript@5.8.3/node_modules/@typescript-eslint/typescript-estree",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@typescript-eslint/utils": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@typescript-eslint+utils@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/@typescript-eslint/utils",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/eslint-config-prettier": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-config-prettier@10.1.5_eslint@9.28.0/node_modules/eslint-config-prettier",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/eslint-plugin-n": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-n@17.19.0_eslint@9.28.0_typescript@5.8.3/node_modules/eslint-plugin-n",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/eslint-plugin-no-only-tests": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-no-only-tests@3.3.0/node_modules/eslint-plugin-no-only-tests",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/eslint-plugin-promise": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-promise@7.2.1_eslint@9.28.0/node_modules/eslint-plugin-promise",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/eslint-plugin-tsdoc": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint-plugin-tsdoc@0.4.0/node_modules/eslint-plugin-tsdoc",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/glob": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/glob@10.4.5/node_modules/glob",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/prettier": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/prettier@3.5.3/node_modules/prettier",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/rimraf": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rimraf@5.0.10/node_modules/rimraf",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/tshy": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tshy@2.0.1/node_modules/tshy",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/typescript-eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript-eslint@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/typescript-eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map": {
+ "name": "@azure-tools/vite-plugin-browser-test-map",
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.9.0",
+ "@types/node": "^18.0.0",
+ "eslint": "^9.9.0",
+ "prettier": "^3.3.3",
+ "rimraf": "^5.0.0",
+ "typescript": "~5.8.2",
+ "typescript-eslint": "~8.26.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/@eslint/js": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@eslint+js@9.28.0/node_modules/@eslint/js",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/prettier": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/prettier@3.5.3/node_modules/prettier",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/rimraf": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rimraf@5.0.10/node_modules/rimraf",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map/node_modules/typescript-eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript-eslint@8.26.1_eslint@9.28.0_typescript@5.8.3/node_modules/typescript-eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation": {
+ "name": "@azure/communication-call-automation",
+ "version": "1.5.0-beta.1",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/communication-common": "^2.3.1",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-paging": "^1.6.2",
+ "@azure/core-rest-pipeline": "^1.17.0",
+ "@azure/core-tracing": "^1.2.0",
+ "@azure/core-util": "^1.11.0",
+ "@azure/logger": "^1.1.4",
+ "events": "^3.0.0",
+ "tslib": "^2.8.1"
+ },
+ "devDependencies": {
+ "@azure-tools/test-credential": "^2.0.0",
+ "@azure-tools/test-recorder": "^4.1.0",
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
+ "@azure/communication-identity": "^1.2.0",
+ "@azure/communication-phone-numbers": "^1.2.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/identity": "^4.5.0",
+ "@azure/service-bus": "^7.9.5",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "dotenv": "^16.0.0",
+ "eslint": "^9.9.0",
+ "inherits": "^2.0.3",
+ "playwright": "^1.48.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure-tools/test-credential": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-credential",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure-tools/test-recorder": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/recorder",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure-tools/test-utils-vitest": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure-tools/vite-plugin-browser-test-map": {
+ "resolved": "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/communication-common": {
+ "resolved": "../../azure-sdk-for-js/sdk/communication/communication-common",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/communication-identity": {
+ "resolved": "../../azure-sdk-for-js/sdk/communication/communication-identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/communication-phone-numbers": {
+ "resolved": "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/core-client": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-client",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/core-paging": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-paging",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/identity": {
+ "resolved": "../../azure-sdk-for-js/sdk/identity/identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@azure/service-bus": {
+ "resolved": "../../azure-sdk-for-js/sdk/servicebus/service-bus",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/dotenv": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/events": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/events@3.3.0/node_modules/events",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/inherits": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/inherits@2.0.4/node_modules/inherits",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-call-automation/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common": {
+ "name": "@azure/communication-common",
+ "version": "2.4.1",
+ "license": "MIT",
+ "dependencies": {
+ "@azure-rest/core-client": "^2.3.3",
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-rest-pipeline": "^1.17.0",
+ "@azure/core-tracing": "^1.2.0",
+ "@azure/core-util": "^1.11.0",
+ "events": "^3.3.0",
+ "jwt-decode": "^4.0.0",
+ "tslib": "^2.8.1"
+ },
+ "devDependencies": {
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/identity": "~4.3.0",
+ "@azure/logger": "^1.1.4",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "mockdate": "^3.0.5",
+ "nock": "14.0.1",
+ "playwright": "^1.48.0",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure-rest/core-client": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-client-rest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure-tools/test-utils-vitest": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/identity": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+identity@4.3.0/node_modules/@azure/identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/events": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/events@3.3.0/node_modules/events",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/jwt-decode": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/jwt-decode@4.0.0/node_modules/jwt-decode",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/mockdate": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/mockdate@3.0.5/node_modules/mockdate",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/nock": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/nock@14.0.1/node_modules/nock",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-common/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity": {
+ "name": "@azure/communication-identity",
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/communication-common": "^2.3.1",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-lro": "^2.7.2",
+ "@azure/core-paging": "^1.6.2",
+ "@azure/core-rest-pipeline": "^1.18.2",
+ "@azure/core-tracing": "^1.2.0",
+ "@azure/logger": "^1.1.4",
+ "events": "^3.3.0",
+ "tslib": "^2.8.1"
+ },
+ "devDependencies": {
+ "@azure-tools/test-credential": "^2.0.0",
+ "@azure-tools/test-recorder": "^4.1.0",
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure/core-util": "^1.6.1",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/identity": "^4.5.0",
+ "@azure/msal-node": "^2.16.1",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "dotenv": "^16.0.0",
+ "eslint": "^9.9.0",
+ "playwright": "^1.48.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure-tools/test-credential": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-credential",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure-tools/test-recorder": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/recorder",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure-tools/test-utils-vitest": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/communication-common": {
+ "resolved": "../../azure-sdk-for-js/sdk/communication/communication-common",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/core-client": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-client",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/core-lro": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+core-lro@2.7.2/node_modules/@azure/core-lro",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/core-paging": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-paging",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/identity": {
+ "resolved": "../../azure-sdk-for-js/sdk/identity/identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@azure/msal-node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+msal-node@2.16.2/node_modules/@azure/msal-node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/dotenv": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/events": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/events@3.3.0/node_modules/events",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-identity/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers": {
+ "name": "@azure/communication-phone-numbers",
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/communication-common": "^2.3.1",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-lro": "^2.7.2",
+ "@azure/core-paging": "^1.6.2",
+ "@azure/core-rest-pipeline": "^1.18.2",
+ "@azure/core-tracing": "^1.2.0",
+ "@azure/core-util": "^1.11.0",
+ "@azure/logger": "^1.1.4",
+ "events": "^3.3.0",
+ "tslib": "^2.8.1"
+ },
+ "devDependencies": {
+ "@azure-tools/test-credential": "^2.0.0",
+ "@azure-tools/test-recorder": "^4.1.0",
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/identity": "^4.5.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "dotenv": "^16.0.0",
+ "eslint": "^9.9.0",
+ "playwright": "^1.48.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure-tools/test-credential": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-credential",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure-tools/test-recorder": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/recorder",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure-tools/test-utils-vitest": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/communication-common": {
+ "resolved": "../../azure-sdk-for-js/sdk/communication/communication-common",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/core-client": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-client",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/core-lro": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+core-lro@2.7.2/node_modules/@azure/core-lro",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/core-paging": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-paging",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/identity": {
+ "resolved": "../../azure-sdk-for-js/sdk/identity/identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/dotenv": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/events": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/events@3.3.0/node_modules/events",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/communication/communication-phone-numbers/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller": {
+ "name": "@azure/abort-controller",
+ "version": "2.1.3",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/abort-controller/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp": {
+ "name": "@azure/core-amqp",
+ "version": "4.3.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.7.2",
+ "@azure/core-util": "^1.9.0",
+ "@azure/logger": "^1.1.2",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "rhea": "^3.0.0",
+ "rhea-promise": "^3.0.0",
+ "tslib": "^2.6.2",
+ "util": "^0.12.5"
+ },
+ "devDependencies": {
+ "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@rollup/plugin-inject": "^5.0.5",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0",
+ "@types/ws": "^8.5.10",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "debug": "^4.3.4",
+ "eslint": "^9.9.0",
+ "playwright": "^1.43.1",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9",
+ "ws": "^8.17.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@azure-tools/vite-plugin-browser-test-map": {
+ "resolved": "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@rollup/plugin-inject": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@rollup+plugin-inject@5.0.5_rollup@4.41.1/node_modules/@rollup/plugin-inject",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@types/debug": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+debug@4.1.12/node_modules/@types/debug",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@types/ws": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/buffer": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/debug": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/debug@4.4.1/node_modules/debug",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/events": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/events@3.3.0/node_modules/events",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/process": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/process@0.11.10/node_modules/process",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/rhea": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rhea@3.0.4/node_modules/rhea",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/rhea-promise": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rhea-promise@3.0.3/node_modules/rhea-promise",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/util": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/util@0.12.5/node_modules/util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-amqp/node_modules/ws": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/ws@8.18.2/node_modules/ws",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth": {
+ "name": "@azure/core-auth",
+ "version": "1.9.1",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-util": "^1.11.0",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-auth/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client": {
+ "name": "@azure/core-client",
+ "version": "1.9.5",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.20.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.6.1",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/core-xml": "^1.3.4",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest": {
+ "name": "@azure-rest/core-client",
+ "version": "2.4.1",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-rest-pipeline": "^1.5.0",
+ "@azure/core-tracing": "^1.0.1",
+ "@typespec/ts-http-runtime": "^0.2.2",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@typespec/ts-http-runtime": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/ts-http-runtime",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client-rest/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/core-xml": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-xml",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-client/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging": {
+ "name": "@azure/core-paging",
+ "version": "1.6.3",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-paging/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline": {
+ "name": "@azure/core-rest-pipeline",
+ "version": "1.20.1",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.8.0",
+ "@azure/core-tracing": "^1.0.1",
+ "@azure/core-util": "^1.11.0",
+ "@azure/logger": "^1.0.0",
+ "@typespec/ts-http-runtime": "^0.2.2",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure-tools/vite-plugin-browser-test-map": {
+ "resolved": "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@typespec/ts-http-runtime": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/ts-http-runtime",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-rest-pipeline/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing": {
+ "name": "@azure/core-tracing",
+ "version": "1.2.1",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/core-auth": "^1.3.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-tracing/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util": {
+ "name": "@azure/core-util",
+ "version": "1.12.1",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@typespec/ts-http-runtime": "^0.2.2",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@azure-tools/vite-plugin-browser-test-map": {
+ "resolved": "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@typespec/ts-http-runtime": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/ts-http-runtime",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-util/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml": {
+ "name": "@azure/core-xml",
+ "version": "1.4.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-xml-parser": "^5.0.7",
+ "tslib": "^2.8.1"
+ },
+ "devDependencies": {
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@types/trusted-types": "^2.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.50.1",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/@types/trusted-types": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/fast-xml-parser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/fast-xml-parser@5.2.3/node_modules/fast-xml-parser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/core-xml/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger": {
+ "name": "@azure/logger",
+ "version": "1.2.1",
+ "license": "MIT",
+ "dependencies": {
+ "@typespec/ts-http-runtime": "^0.2.2",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "dotenv": "^16.3.1",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/@typespec/ts-http-runtime": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/ts-http-runtime",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/dotenv": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/logger/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime": {
+ "name": "@typespec/ts-http-runtime",
+ "version": "0.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.0",
+ "tslib": "^2.6.2"
+ },
+ "devDependencies": {
+ "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.41.2",
+ "tsx": "^4.19.1",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/@azure-tools/vite-plugin-browser-test-map": {
+ "resolved": "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/http-proxy-agent": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/http-proxy-agent@7.0.2/node_modules/http-proxy-agent",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/https-proxy-agent": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/https-proxy-agent@7.0.6/node_modules/https-proxy-agent",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/tsx": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tsx@4.19.4/node_modules/tsx",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/core/ts-http-runtime/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity": {
+ "name": "@azure/identity",
+ "version": "4.10.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-rest-pipeline": "^1.17.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.11.0",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-browser": "^4.2.0",
+ "@azure/msal-node": "^3.5.0",
+ "open": "^10.1.0",
+ "tslib": "^2.2.0"
+ },
+ "devDependencies": {
+ "@azure-tools/test-recorder": "^4.1.0",
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/keyvault-keys": "^4.2.0",
+ "@types/jsonwebtoken": "^9.0.0",
+ "@types/ms": "^2.1.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "assertion-error": "^2.0.1",
+ "dotenv": "^16.0.0",
+ "eslint": "^9.9.0",
+ "jsonwebtoken": "^9.0.0",
+ "ms": "^2.1.3",
+ "playwright": "^1.48.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure-tools/test-recorder": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/recorder",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure-tools/test-utils-vitest": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/core-client": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-client",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/keyvault-keys": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+keyvault-keys@4.9.0/node_modules/@azure/keyvault-keys",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/msal-browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+msal-browser@4.13.0/node_modules/@azure/msal-browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@azure/msal-node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+msal-node@3.6.0/node_modules/@azure/msal-node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@types/jsonwebtoken": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+jsonwebtoken@9.0.9/node_modules/@types/jsonwebtoken",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@types/ms": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+ms@2.1.0/node_modules/@types/ms",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/assertion-error": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/dotenv": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/jsonwebtoken": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/jsonwebtoken@9.0.2/node_modules/jsonwebtoken",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/ms": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/ms@2.1.3/node_modules/ms",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/open": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/open@10.1.2/node_modules/open",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/identity/identity/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus": {
+ "name": "@azure/service-bus",
+ "version": "7.10.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-amqp": "^4.3.2",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-paging": "^1.6.2",
+ "@azure/core-rest-pipeline": "^1.19.0",
+ "@azure/core-tracing": "^1.2.0",
+ "@azure/core-util": "^1.11.0",
+ "@azure/core-xml": "^1.4.3",
+ "@azure/logger": "^1.1.4",
+ "buffer": "^6.0.3",
+ "is-buffer": "^2.0.5",
+ "jssha": "^3.3.1",
+ "long": "^5.3.1",
+ "process": "^0.11.10",
+ "rhea-promise": "^3.0.3",
+ "tslib": "^2.8.1",
+ "util": "^0.12.5"
+ },
+ "devDependencies": {
+ "@azure-tools/test-credential": "^2.1.0",
+ "@azure-tools/test-recorder": "^4.1.0",
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
+ "@azure/arm-servicebus": "^6.1.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@azure/identity": "^4.7.0",
+ "@rollup/plugin-inject": "^5.0.5",
+ "@types/chai-as-promised": "^8.0.1",
+ "@types/debug": "^4.1.4",
+ "@types/is-buffer": "^2.0.0",
+ "@types/node": "^18.0.0",
+ "@types/ws": "^7.2.4",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "chai": "^5.1.1",
+ "chai-as-promised": "^8.0.0",
+ "chai-exclude": "^3.0.0",
+ "debug": "^4.1.1",
+ "dotenv": "^16.0.0",
+ "eslint": "^9.9.0",
+ "events": "^3.0.0",
+ "https-proxy-agent": "^7.0.0",
+ "playwright": "^1.50.1",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9",
+ "ws": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure-tools/test-credential": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-credential",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure-tools/test-recorder": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/recorder",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure-tools/test-utils-vitest": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure-tools/vite-plugin-browser-test-map": {
+ "resolved": "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/arm-servicebus": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@azure+arm-servicebus@6.1.0/node_modules/@azure/arm-servicebus",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-amqp": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-amqp",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-client": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-client",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-paging": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-paging",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/core-xml": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-xml",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/identity": {
+ "resolved": "../../azure-sdk-for-js/sdk/identity/identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@rollup/plugin-inject": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@rollup+plugin-inject@5.0.5_rollup@4.41.1/node_modules/@rollup/plugin-inject",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@types/chai-as-promised": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+chai-as-promised@8.0.2/node_modules/@types/chai-as-promised",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@types/debug": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+debug@4.1.12/node_modules/@types/debug",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@types/is-buffer": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+is-buffer@2.0.2/node_modules/@types/is-buffer",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@types/ws": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+ws@7.4.7/node_modules/@types/ws",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/buffer": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/chai": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chai@5.2.0/node_modules/chai",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/chai-as-promised": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chai-as-promised@8.0.1_chai@5.2.0/node_modules/chai-as-promised",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/chai-exclude": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/chai-exclude@3.0.1_chai@5.2.0/node_modules/chai-exclude",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/debug": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/debug@4.4.1/node_modules/debug",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/dotenv": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/events": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/events@3.3.0/node_modules/events",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/https-proxy-agent": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/https-proxy-agent@7.0.6/node_modules/https-proxy-agent",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/is-buffer": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/is-buffer@2.0.5/node_modules/is-buffer",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/jssha": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/jssha@3.3.1/node_modules/jssha",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/long": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/long@5.3.2/node_modules/long",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/process": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/process@0.11.10/node_modules/process",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/rhea-promise": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/rhea-promise@3.0.3/node_modules/rhea-promise",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/util": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/util@0.12.5/node_modules/util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/servicebus/service-bus/node_modules/ws": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/ws@8.18.2/node_modules/ws",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder": {
+ "name": "@azure-tools/test-recorder",
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/core-auth": "^1.3.2",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-rest-pipeline": "^1.13.0",
+ "@azure/core-util": "^1.6.1",
+ "@azure/logger": "^1.0.0"
+ },
+ "devDependencies": {
+ "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "concurrently": "^8.2.0",
+ "eslint": "^9.9.0",
+ "express": "^4.19.2",
+ "playwright": "^1.41.2",
+ "tslib": "^2.6.2",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure-tools/vite-plugin-browser-test-map": {
+ "resolved": "../../azure-sdk-for-js/common/tools/vite-plugin-browser-test-map",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure/core-client": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-client",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@azure/logger": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/logger",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/concurrently": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/concurrently@8.2.2/node_modules/concurrently",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/express": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/express@4.21.2/node_modules/express",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/recorder/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential": {
+ "name": "@azure-tools/test-credential",
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure-tools/test-recorder": "^4.0.0",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-util": "^1.11.0",
+ "@azure/identity": "^4.5.0",
+ "tslib": "^2.8.1"
+ },
+ "devDependencies": {
+ "@azure-tools/test-utils-vitest": "^1.0.0",
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.49.1",
+ "typescript": "~5.8.2",
+ "vitest": "^3.0.9"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@azure-tools/test-recorder": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/recorder",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@azure-tools/test-utils-vitest": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@azure/core-auth": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-auth",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@azure/core-util": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-util",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@azure/identity": {
+ "resolved": "../../azure-sdk-for-js/sdk/identity/identity",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-credential/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest": {
+ "name": "@azure-tools/test-utils-vitest",
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure-tools/test-recorder": "^4.0.0",
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-rest-pipeline": "^1.16.3",
+ "@azure/core-tracing": "^1.1.2",
+ "@opentelemetry/api": "^1.9.0",
+ "tslib": "^2.6.3",
+ "vitest": "^3.0.9"
+ },
+ "devDependencies": {
+ "@azure/dev-tool": "^1.0.0",
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0",
+ "@types/node": "^18.0.0",
+ "@vitest/browser": "^3.0.9",
+ "@vitest/coverage-istanbul": "^3.0.9",
+ "@vitest/expect": "^3.0.9",
+ "eslint": "^9.9.0",
+ "playwright": "^1.46.0",
+ "typescript": "~5.8.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@azure-tools/test-recorder": {
+ "resolved": "../../azure-sdk-for-js/sdk/test-utils/recorder",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@azure/abort-controller": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/abort-controller",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@azure/core-rest-pipeline": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-rest-pipeline",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@azure/core-tracing": {
+ "resolved": "../../azure-sdk-for-js/sdk/core/core-tracing",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@azure/dev-tool": {
+ "resolved": "../../azure-sdk-for-js/common/tools/dev-tool",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@azure/eslint-plugin-azure-sdk": {
+ "resolved": "../../azure-sdk-for-js/common/tools/eslint-plugin-azure-sdk",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@opentelemetry/api": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@types/node": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@types+node@18.19.110/node_modules/@types/node",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@vitest/browser": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+browser@3.2.0_playwright@1.52.0_vite@6.3.5_@types+node@22.7.9_tsx@4.19.4_yaml@2.8.0__vitest@3.2.0/node_modules/@vitest/browser",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@vitest/coverage-istanbul": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+coverage-istanbul@3.2.0_vitest@3.2.0/node_modules/@vitest/coverage-istanbul",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/@vitest/expect": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/@vitest+expect@3.2.0/node_modules/@vitest/expect",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/eslint": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/eslint@9.28.0/node_modules/eslint",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/playwright": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/playwright@1.52.0/node_modules/playwright",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/tslib": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/typescript": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript",
+ "link": true
+ },
+ "../../azure-sdk-for-js/sdk/test-utils/test-utils-vitest/node_modules/vitest": {
+ "resolved": "../../azure-sdk-for-js/common/temp/node_modules/.pnpm/vitest@3.2.0_@types+debug@4.1.12_@types+node@18.19.110_@vitest+browser@3.2.0_tsx@4.19.4_yaml@2.8.0/node_modules/vitest",
+ "link": true
+ },
+ "node_modules/@azure-rest/core-client": {
+ "version": "2.4.0",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-rest-pipeline": "^1.5.0",
+ "@azure/core-tracing": "^1.0.1",
+ "@typespec/ts-http-runtime": "^0.2.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/abort-controller": {
+ "version": "2.1.2",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/communication-call-automation": {
+ "resolved": "../../azure-sdk-for-js/sdk/communication/communication-call-automation",
+ "link": true
+ },
+ "node_modules/@azure/communication-common": {
+ "version": "2.4.0",
+ "license": "MIT",
+ "dependencies": {
+ "@azure-rest/core-client": "^2.3.3",
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-rest-pipeline": "^1.17.0",
+ "@azure/core-tracing": "^1.2.0",
+ "@azure/core-util": "^1.11.0",
+ "events": "^3.3.0",
+ "jwt-decode": "^4.0.0",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/communication-identity": {
+ "version": "1.3.1",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/communication-common": "^2.3.1",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-client": "^1.3.0",
+ "@azure/core-lro": "^2.2.0",
+ "@azure/core-paging": "^1.1.1",
+ "@azure/core-rest-pipeline": "^1.3.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/logger": "^1.0.0",
+ "events": "^3.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/communication-identity/node_modules/@azure/abort-controller": {
+ "version": "1.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/communication-rooms": {
+ "version": "1.2.0",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/communication-common": "^2.3.1",
+ "@azure/core-auth": "^1.9.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-paging": "^1.6.2",
+ "@azure/core-rest-pipeline": "^1.18.0",
+ "@azure/core-tracing": "^1.2.0",
+ "@azure/core-util": "^1.11.0",
+ "@azure/logger": "^1.1.4",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-auth": {
+ "version": "1.9.0",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-util": "^1.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-client": {
+ "version": "1.9.4",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.20.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.6.1",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-lro": {
+ "version": "2.7.2",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-util": "^1.2.0",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-paging": {
+ "version": "1.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline": {
+ "version": "1.21.0",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.8.0",
+ "@azure/core-tracing": "^1.0.1",
+ "@azure/core-util": "^1.11.0",
+ "@azure/logger": "^1.0.0",
+ "@typespec/ts-http-runtime": "^0.2.3",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-tracing": {
+ "version": "1.2.0",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-util": {
+ "version": "1.12.0",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@typespec/ts-http-runtime": "^0.2.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/eventgrid": {
+ "version": "4.15.0",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-client": "^1.5.0",
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.2.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@azure/logger": {
+ "version": "1.2.0",
+ "license": "MIT",
+ "dependencies": {
+ "@typespec/ts-http-runtime": "^0.2.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.11",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/body-parser": {
+ "version": "1.19.6",
+ "license": "MIT",
+ "dependencies": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/express": {
+ "version": "4.17.23",
+ "license": "MIT",
+ "dependencies": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "node_modules/@types/express-serve-static-core": {
+ "version": "4.19.6",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@types/http-errors": {
+ "version": "2.0.5",
+ "license": "MIT"
+ },
+ "node_modules/@types/mime": {
+ "version": "1.3.5",
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.19.1",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/qs": {
+ "version": "6.14.0",
+ "license": "MIT"
+ },
+ "node_modules/@types/range-parser": {
+ "version": "1.2.7",
+ "license": "MIT"
+ },
+ "node_modules/@types/send": {
+ "version": "0.17.5",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/serve-static": {
+ "version": "1.15.8",
+ "license": "MIT",
+ "dependencies": {
+ "@types/http-errors": "*",
+ "@types/node": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@typespec/ts-http-runtime": {
+ "version": "0.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.3",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "license": "MIT"
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.3",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.7.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "license": "MIT"
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.5.0",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "license": "MIT"
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.21.2",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.7.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.3.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.12",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.13.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.3.1",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/debug": {
+ "version": "4.4.1",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/ms": {
+ "version": "2.1.3",
+ "license": "MIT"
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.4.1",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/ms": {
+ "version": "2.1.3",
+ "license": "MIT"
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "license": "ISC"
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/jwt-decode": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.3",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "license": "MIT"
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "2.0.22",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^3.2.7",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^5.7.1",
+ "simple-update-notifier": "^1.0.7",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "3.2.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/nodemon/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.12",
+ "license": "MIT"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pstree.remy": {
+ "version": "1.1.8",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "5.7.2",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.19.0",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "license": "MIT"
+ },
+ "node_modules/serve-static": {
+ "version": "1.16.2",
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.19.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "license": "ISC"
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/simple-update-notifier": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "~7.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/simple-update-notifier/node_modules/semver": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/touch": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "license": "0BSD"
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "license": "MIT"
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ }
+ }
+}
From 395f9b828dae067d22fc9b10f0341a00cedba4c3 Mon Sep 17 00:00:00 2001
From: nageshy
Date: Sun, 27 Jul 2025 12:32:56 +0530
Subject: [PATCH 05/12] Updated code
---
callautomation-lobbycall-sample/src/app.ts | 595 +++++++-----------
.../src/app.ts.xxx | 277 --------
.../src/webpage/index.html | 83 +--
3 files changed, 235 insertions(+), 720 deletions(-)
delete mode 100644 callautomation-lobbycall-sample/src/app.ts.xxx
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
index bd19a61e..3b2114c1 100644
--- a/callautomation-lobbycall-sample/src/app.ts
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -1,10 +1,11 @@
import { config } from 'dotenv';
import express, { Application } from 'express';
-import { CommunicationUserIdentifier, PhoneNumberIdentifier } from "@azure/communication-common";
+import { CommunicationUserIdentifier, getIdentifierRawId } from "@azure/communication-common";
import {
CallAutomationClient,
CallInvite,
- AnswerCallOptions,
+ TextSource,
+ PlayOptions,
MoveParticipantsOptions
} from "@azure/communication-call-automation";
@@ -24,6 +25,7 @@ let lobbyCallerId: string;
const callbackUriHost = process.env.CALLBACK_URI || "";
const connectionString = process.env.CONNECTION_STRING || ""
const endpoint = process.env.PMA_ENDPOINT || ""
+// let webSocket = null;
async function createAcsClient() {
lobbyCallConnectionId = "";
@@ -35,10 +37,93 @@ async function createAcsClient() {
console.log("Initialized ACS Client.");
}
-app.get('/TargetCallToAcsUser(Create)', async (req, res) => {
- const acsTarget = req.body.acsTarget; // expects { "acsTarget": "" }
+const http = require('http');
+// const WebSocket = require('ws');
+// const server = http.createServer(app);
+
+// WebSocket server setup
+// const wss = new WebSocket.Server({ noServer: true });
+
+// server.on('upgrade', (request, socket, head) => {
+// // Only accept connections to the correct path
+// const url = request.url || '';
+// if (url === `/ws/${process.env.SOCKET_TOKEN}`) {
+// wss.handleUpgrade(request, socket, head, function done(ws) {
+// wss.emit('connection', ws, request);
+// });
+// } else {
+// socket.destroy();
+// }
+// });
+
+// wss.on('connection', (ws) => {
+// webSocket = ws;
+// console.log('Received WEB SOCKET request.');
+
+// ws.on('message', async (message) => {
+// const jsResponse = message.toString();
+// console.log(`Received from JS: ${jsResponse}`);
+
+// // Move participant to target call if response is "yes"
+// if (jsResponse.trim().toLowerCase() === 'yes') {
+// console.log('TODO: Move Participant');
+// try {
+// console.log(`
+// ~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~
+// Move Participant operation started..
+// Source Caller Id: ${lobbyCallerId}
+// Source Connection Id: ${lobbyCallConnectionId}
+// Target Connection Id: ${targetCallConnectionId}
+// `);
+
+// // Get the target connection
+// const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
+
+// // Get participants from source connection for reference
+// // const sourceConnection = client.getCallConnection(lobbyConnectionId);
+
+// // Create participant identifier based on the input
+// let participantToMove;
+// if (lobbyCallerId.startsWith('+')) {
+// // Phone number
+// participantToMove = { phoneNumber: lobbyCallerId };
+// console.log(`Moving phone number participant: ${lobbyCallerId}`);
+// } else if (lobbyCallerId.startsWith('8:acs:')) {
+// // ACS Communication User
+// participantToMove = { communicationUserId: lobbyCallerId };
+// console.log(`Moving ACS user participant: ${lobbyCallerId}`);
+// } else {
+// console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
+// }
+
+// // Prepare move participants options
+// const options : MoveParticipantsOptions = {
+// operationContext: "MoveParticipant2"
+// };
+
+// // Call the ACS SDK to move participants
+// await targetConnection.moveParticipants([participantToMove], lobbyCallConnectionId, options);
+
+// console.log('Move Participants operation completed successfully.');
+// } catch (ex) {
+// console.log(`Error in manual move participants operation: ${ex.message}`);
+// }
+// }
+// });
+
+// ws.on('close', () => {
+// webSocket = null;
+// });
+// });
+
+app.get('/targetCallToAcsUser', async (req, res) => {
+ const acsTarget = req.query.acsTarget as string; // expects ?acsTarget=
console.log('\n~~~~~~~~~~~~ /TargetCall(Create) ~~~~~~~~~~~~\n');
+ if (!acsTarget) {
+ return res.status(400).send('Missing acsTarget query parameter');
+ }
+
try {
const callbackUri = `${callbackUriHost}/api/callbacks`;
const callee : CommunicationUserIdentifier = {
@@ -75,321 +160,65 @@ app.get('/TargetCallToAcsUser(Create)', async (req, res) => {
}
});
-app.get('/GetParticipants/:callConnectionId', async (req, res) => {
- const callConnectionId = req.params.callConnectionId;
- console.log(`\n~~~~~~~~~~~~ /GetParticipants/${callConnectionId} ~~~~~~~~~~~~\n`);
- try {
- const callConnection = acsClient.getCallConnection(callConnectionId);
- const participantsResponse = await callConnection.getAllParticipant();
- const participants = participantsResponse.value;
-
- // Format participant info
- const participantInfo = participants.map(p => {
- let type = p.identifier.kind || p.identifier.constructor.name;
- let rawId = p.identifier.rawId;
- let phoneNumber = p.identifier.phoneNumber || null;
- let acsUserId = p.identifier.communicationUserId || null;
-
- return {
- rawId,
- type,
- phoneNumber,
- acsUserId
- };
- });
-
- // Sort: phone numbers first, then ACS users
- participantInfo.sort((a, b) => {
- if (!a.acsUserId && b.acsUserId) return -1;
- if (a.acsUserId && !b.acsUserId) return 1;
- return 0;
- });
-
- // Format output
- if (participantInfo.length === 0) {
- return res.status(404).json({
- message: "No participants found for the specified call connection.",
- callConnectionId
- });
- } else {
- let msg = `\nNo of Participants: ${participantInfo.length}\nParticipants: \n-------------\n`;
- msg += participantInfo.map((p, i) => {
- if (p.acsUserId) {
- return `${i + 1}. ${p.type} - RawId: ${p.acsUserId}`;
- } else {
- return `${i + 1}. ${p.type} - RawId: ${p.rawId}, Phone: ${p.phoneNumber}`;
- }
- }).join('\n');
- console.log(msg);
- return res.type('text/plain').send(msg);
- }
- } catch (ex) {
- console.error(`Error getting participants for call ${callConnectionId}: ${ex.message}`);
- return res.status(400).json({
- error: ex.message,
- callConnectionId
- });
- }
-});
-
-app.get('/userCallToCallAutomation', async (req, res) => {
- console.log("--------- UserCallToCallAutomation - Call 1 API Endpoint -------------------");
- try {
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const callee : PhoneNumberIdentifier = {
- phoneNumber: acsInboundPhoneNumber
- };
- const callInvite : CallInvite = {
- targetParticipant: callee,
- sourceCallIdNumber: {
- phoneNumber: userPhoneNumber,
- },
- };
- const options = {
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- },
- operationContext: 'CallOne'
- };
- var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
- callConnectionId1 = createCallResult.callConnectionProperties.callConnectionId;
- callerId1 = userPhoneNumber;
- calleeId1 = acsInboundPhoneNumber;
-
- console.log("=== Call From User to Call Automation ===");
- console.log(`Created call from ${userPhoneNumber} to ${acsOutboundPhoneNumber}`);
- console.log(`Connection ID: ${callConnectionId1}`);
- console.log("=== END WORKFLOW INITIATION ===");
- } catch (err) {
- console.error('Error creating call:', err);
- }
- res.redirect('/');
-});
-
-app.get('/createCall2', async (req, res) => {
- console.log('--------- createCall2 - Call 2 API Endpoint " -------------------');
- try {
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const callee : PhoneNumberIdentifier = {
- phoneNumber: acsOutboundPhoneNumber
- };
- const callInvite : CallInvite = {
- targetParticipant: callee,
- sourceCallIdNumber: {
- phoneNumber: acsInboundPhoneNumber,
- },
- };
- const options = {
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- },
- operationContext: 'CallTwo'
- };
- var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
- callConnectionId2 = createCallResult.callConnectionProperties.callConnectionId;
- // Track this as Call 2
- lastWorkflowCallType = "CallTwo";
- callerId2 = acsInboundPhoneNumber;
- calleeId2 = acsOutboundPhoneNumber;
-
- console.log('=== CALL TWO WORKFLOW INITIATED ===');
- console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
- console.log(`Connection ID: ${callConnectionId2}`);
- console.log(`This call should trigger MoveParticipantEvent (Scenario 2) which will redirect to ACS user ${acsTestIdentity2}`);
- console.log('Operation Context: CallTwo');
- console.log('=== END WORKFLOW INITIATION ===');
- } catch (err) {
- console.error('Error creating call:', err);
- }
- res.redirect('/');
-});
-
-app.get('/createCall3', async (req, res) => {
- console.log('--------- createCall3 - Call 3 API Endpoint " -------------------');
- try {
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const callee : PhoneNumberIdentifier = {
- phoneNumber: acsOutboundPhoneNumber
- };
- const callInvite : CallInvite = {
- targetParticipant: callee,
- sourceCallIdNumber: {
- phoneNumber: acsInboundPhoneNumber,
- },
- };
- const options = {
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- },
- operationContext: 'CallThree'
- };
- var createCallResult = await acsClient.createCall(callInvite, callbackUri, options);
- callConnectionId3 = createCallResult.callConnectionProperties.callConnectionId;
- // Track this as Call 2
- lastWorkflowCallType = "CallThree";
- callerId3 = acsInboundPhoneNumber;
- calleeId3 = acsOutboundPhoneNumber;
-
- console.log('=== CALL THREE WORKFLOW INITIATED ===');
- console.log(`Created call from ${acsInboundPhoneNumber} to ${acsOutboundPhoneNumber}`);
- console.log(`Connection ID: ${callConnectionId3}`);
- console.log(`This call should trigger MoveParticipantEvent (Scenario 3) which will redirect to ACS user ${acsTestIdentity3}`);
- console.log('Operation Context: CallThree');
- console.log('=== END WORKFLOW INITIATION ===');
- } catch (err) {
- console.error('Error creating call:', err);
- }
- res.redirect('/');
-});
-
-app.get('/moveParticipant2', async (req, res) => {
- console.log('--------- MoveParticipant API End Point -------------------');
-
- try {
- const request = req.body;
- console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
- console.log(`Source Connection ID: ${callConnectionId2}`);
- console.log(`Target Connection ID: ${callConnectionId1}`);
- console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
-
- // Get the target connection (where we want to move participants to)
- const targetConnection = acsClient.getCallConnection(callConnectionId1);
-
- // Get participants from source connection for reference (optional)
- const sourceConnection = acsClient.getCallConnection(callConnectionId2);
-
- // Create participant identifier based on the input
- let participantToMove;
- if (acsOutboundPhoneNumber.startsWith('+')) {
- // Phone number
- participantToMove = { phoneNumber: acsOutboundPhoneNumber };
- console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
- } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
- // ACS Communication User
- participantToMove = { communicationUserId: acsOutboundPhoneNumber };
- console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
- } else {
- console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
- }
-
- // Prepare move participants options
- const options : MoveParticipantsOptions = {
- operationContext: "MoveParticipant2"
- };
-
- // Call the ACS SDK to move participants
- await targetConnection.moveParticipants([participantToMove], callConnectionId2, options);
- callConnectionId2 = "";
- callerId2 = "";
- calleeId2 = "";
- calleeId1 = acsTestIdentity2;
-
- // For demonstration, assume success
- console.log('Move Participants operation completed successfully');
- console.log(`Moved ${acsTestIdentity2} from ${callConnectionId2} to ${callConnectionId1}`);
- console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
- } catch (err) {
- console.error(`Error in manual move participant operation: ${err.message}`);
- }
- res.redirect('/');
-});
-
-app.get('/moveParticipant3', async (req, res) => {
- console.log('--------- MoveParticipant API End Point -------------------');
-
- try {
- const request = req.body;
- console.log('=== MANUAL MOVE PARTICIPANT REQUESTED ===');
- console.log(`Source Connection ID: ${callConnectionId3}`);
- console.log(`Target Connection ID: ${callConnectionId1}`);
- console.log(`Participant to Move: ${acsOutboundPhoneNumber}`);
-
- // Get the target connection (where we want to move participants to)
- const targetConnection = acsClient.getCallConnection(callConnectionId1);
-
- // Get participants from source connection for reference (optional)
- const sourceConnection = acsClient.getCallConnection(callConnectionId3);
-
- // Create participant identifier based on the input
- let participantToMove;
- if (acsOutboundPhoneNumber.startsWith('+')) {
- // Phone number
- participantToMove = { phoneNumber: acsOutboundPhoneNumber };
- console.log(`Moving phone number participant: ${acsOutboundPhoneNumber}`);
- } else if (acsOutboundPhoneNumber.startsWith('8:acs:')) {
- // ACS Communication User
- participantToMove = { communicationUserId: acsOutboundPhoneNumber };
- console.log(`Moving ACS user participant: ${acsOutboundPhoneNumber}`);
- } else {
- console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
- }
-
- // Prepare move participants options
- const options : MoveParticipantsOptions = {
- operationContext: "MoveParticipant3"
- };
-
- // Call the ACS SDK to move participants
- await targetConnection.moveParticipants([participantToMove], callConnectionId3, options);
- callConnectionId3 = "";
- callerId3 = "";
- calleeId3 = "";
- calleeId1 = acsTestIdentity3;
-
- // For demonstration, assume success
- console.log('Move Participants operation completed successfully');
- console.log(`Moved ${acsTestIdentity3} from ${callConnectionId3} to ${callConnectionId1}`);
- console.log('=== MOVE PARTICIPANTS OPERATION COMPLETE ===');
- } catch (err) {
- console.error(`Error in manual move participant operation: ${err.message}`);
- }
- res.redirect('/');
-});
-
-app.get('/terminateCalls', async (req, res) => {
- console.log(`calls 1: ${callConnectionId1}, 2: ${callConnectionId2}, 3: ${callConnectionId3}`);
- if (callConnectionId1) {
+app.get('/call-data', async (req, res) => {
+ let participantId1 = "";
+ let participantId2 = "";
+ let participantId3 = "";
+ if (lobbyCallConnectionId) {
+ console.log(`\n~~~~~~~~~~~~ /GetParticipants/${lobbyCallConnectionId} ~~~~~~~~~~~~\n`);
try {
- console.log(`Terminating Call 1 with ID: ${callConnectionId1}`);
- const callConnection1 = acsClient.getCallConnection(callConnectionId1);
- await callConnection1.hangUp(true);
- } catch (error) {
- console.error(`Error terminating Call 1: ${error.message}`);
+ const callConnection = acsClient.getCallConnection(lobbyCallConnectionId);
+ const participantsResponse = await callConnection.listParticipants();
+ const participants = participantsResponse.values;
+
+ if (participants.length === 0) {
+ console.log(`No participants found in call ${lobbyCallConnectionId}`);
+ } else if (participants.length === 1) {
+ participantId1 = participants[0].identifier.toString();
+ } else if (participants.length === 2) {
+ participantId1 = participants[0].identifier.toString();
+ participantId2 = participants[1].identifier.toString();
+ } else if (participants.length === 3) {
+ participantId1 = participants[0].identifier.toString();
+ participantId2 = participants[1].identifier.toString();
+ participantId3 = participants[2].identifier.toString();
+ }
+ } catch (ex) {
+ console.error(`Error getting participants for call ${lobbyCallConnectionId}: ${ex.message}`);
}
}
- if (callConnectionId2) {
+ res.json({ participantId1, participantId2, participantId3 });
+});
+
+app.get('/terminateCalls', async (req, res) => {
+ console.log(`calls 1: ${lobbyCallConnectionId}, 2: ${targetCallConnectionId}`);
+ if (lobbyCallConnectionId) {
try {
- console.log(`Terminating Call 2 with ID: ${callConnectionId2}`);
- const callConnection2 = acsClient.getCallConnection(callConnectionId2);
- await callConnection2.hangUp(true);
+ console.log(`Terminating Lobby Call with ID: ${lobbyCallConnectionId}`);
+ const lobbyConnection = acsClient.getCallConnection(lobbyCallConnectionId);
+ await lobbyConnection.hangUp(true);
} catch (error) {
- console.error(`Error terminating Call 2: ${error.message}`);
+ console.error(`Error terminating Lobby Call: ${error.message}`);
}
}
- if (callConnectionId3) {
+ if (targetCallConnectionId) {
try {
- console.log(`Terminating Call 3 with ID: ${callConnectionId3}`);
- const callConnection3 = acsClient.getCallConnection(callConnectionId3);
- await callConnection3.hangUp(true);
+ console.log(`Terminating Target Call with ID: ${targetCallConnectionId}`);
+ const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
+ await targetConnection.hangUp(true);
} catch (error) {
- console.error(`Error terminating Call 3: ${error.message}`);
+ console.error(`Error terminating Target Call: ${error.message}`);
}
}
console.log("Calls hung up successfully.");
- callConnectionId1 = "";
- callConnectionId2 = "";
- callConnectionId3 = "";
- callerId1 = "";
- callerId2 = "";
- callerId3 = "";
- calleeId1 = "";
- calleeId2 = "";
- calleeId3 = "";
+ lobbyCallConnectionId = "";
+ targetCallConnectionId = "";
+ lobbyCallerId = "";
res.redirect('/');
});
-app.post('/api/moveParticipantEvent', async (req, res) => {
- console.log('--------- /api/moveParticipantEvent -------------------');
+app.post('/api/lobbyCallSupportEventHandler', async (req, res) => {
+ console.log('--------- /api/lobbyCallSupportEventHandler -------------------');
const event = req.body[0];
const eventData = event.data;
if (event.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") {
@@ -408,59 +237,34 @@ app.post('/api/moveParticipantEvent', async (req, res) => {
console.log(`From Caller Id: ${fromCallerId}`);
console.log(`To Caller Id : ${toCallerId}`);
- // Scenario 1: User calls from their phone number to ACS inbound number
- if (fromCallerId.includes(userPhoneNumber)) {
- console.log('=== SCENARIO 1: USER INCOMING CALL ===');
-
- const callbackUri = new URL('/api/callbacks', callbackUriHost).toString();
- const options : AnswerCallOptions = {
- operationContext: "CallOne"
+ // Lobby Call: Answer
+ if (toCallerId.includes(acsGeneratedId)) {
+ const callbackUri = `${callbackUriHost}/api/callbacks`;
+ const options = {
+ operationContext: 'LobbyCall',
+ callIntelligenceOptions: {
+ cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
+ }
};
- //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
- var answerCallResult = await acsClient.answerCall(eventData.incomingCallContext, callbackUri, options);
- callConnectionId1 = answerCallResult.callConnectionProperties.callConnectionId;
-
- console.log(`User Call Answered - CallConnectionId: ${callConnectionId1}`);
- console.log(`Correlation Id: ${eventData.correlationId}`);
- console.log('Operation Context: CallOne');
- console.log('=== END SCENARIO 1 ===');
- }
- // Scenario 2: ACS inbound number calls ACS outbound number (workflow triggered)
- else if (fromCallerId.includes(acsInboundPhoneNumber)) {
- console.log('=== SCENARIO 2: WORKFLOW CALL TO BE REDIRECTED ===');
- console.log(`Last Workflow Call Type: ${lastWorkflowCallType}`);
-
- // Check which type of workflow call this is and redirect accordingly
- let redirectTarget;
- if (lastWorkflowCallType === 'CallTwo') {
- // Redirect the call to ACS User Identity 2
- redirectTarget = acsTestIdentity2;
- const callee : CommunicationUserIdentifier = {
- communicationUserId: redirectTarget
- };
- const callInvite : CallInvite = {
- targetParticipant: callee
- };
- //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
- var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
- console.log('PROCESSING CALL TWO - Redirecting to ACS User Identity 2');
- } else if (lastWorkflowCallType === 'CallThree') {
- // Redirect the call to ACS User Identity 3
- redirectTarget = acsTestIdentity3;
- const callee : CommunicationUserIdentifier = {
- communicationUserId: redirectTarget
- };
- const callInvite : CallInvite = {
- targetParticipant: callee
- };
- //console.log(`Incoming call context: ${eventData.incomingCallContext}`);
- var redirectCallResult = await acsClient.redirectCall(eventData.incomingCallContext, callInvite);
- console.log('PROCESSING CALL THREE - Redirecting to ACS User Identity 3');
- }
- console.log('=== END SCENARIO 2 ===');
+ const answerCallResult = await acsClient.answerCall(
+ eventData.incomingCallContext,
+ callbackUri,
+ options
+ );
+ lobbyCallConnectionId = answerCallResult.callConnectionProperties.callConnectionId;
+
+ console.log(
+ `User Call(Inbound) Answered by Call Automation.`,
+ `From Caller Raw Id: ${fromCallerId}`,
+ `To Caller Raw Id: ${toCallerId}`,
+ `Lobby Call Connection Id: ${lobbyCallConnectionId}`,
+ `Correlation Id: ${eventData.correlationId}`,
+ `Lobby Call answered successfully.`
+ );
}
}
+
res.status(200).send();
});
@@ -471,43 +275,64 @@ app.post('/api/callbacks', async (req, res) => {
// For demonstration, log the event type and IDs
console.log(`Received call event: ${event.type}`);
console.log(`Correlation id:-> ${eventData.correlationId}`)
+
if (event.type === "Microsoft.Communication.CallConnected") {
console.log('\n--------- CallConnected Event Block -------------------');
- switch (eventData.operationContext) {
- case 'CallOne':
- //callConnectionId1 = callConnectionId;
- console.log('=== CALL ONE CONNECTED ===');
- console.log('User call connected');
- console.log('=== END CALL ONE CONNECTED ===');
- break;
- case 'CallTwo':
- //callConnectionId2 = callConnectionId;
- calleeId2 = acsTestIdentity2;
- console.log('=== CALL TWO CONNECTED ===');
- console.log('User call connected');
- console.log('=== END CALL TWO CONNECTED ===');
- break;
- case 'CallThree':
- //callConnectionId3 = callConnectionId;
- calleeId3 = acsTestIdentity3;
- console.log('=== CALL THREE CONNECTED ===');
- console.log('User call connected');
- console.log('=== END CALL THREE CONNECTED ===');
- break;
+
+ if ((eventData.operationContext || '') === 'LobbyCall') {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received call event : ${event.type}`);
+ console.log(`Lobby Call Connection Id: ${eventData.callConnectionId}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+
+ // Record lobby caller id and connection id
+ const lobbyCallConnection = acsClient.getCallConnection(eventData.callConnectionId);
+ const callConnectionProperties = await lobbyCallConnection.getCallConnectionProperties();
+ lobbyCallerId = getIdentifierRawId(callConnectionProperties.source);
+ lobbyCallConnectionId = callConnectionProperties.callConnectionId;
+ console.log(`Lobby Caller Id: ${lobbyCallerId}`);
+ console.log(`Lobby Connection Id: ${lobbyCallConnectionId}`);
+
+ // Play lobby waiting message
+ const callMedia = acsClient.getCallConnection(eventData.callConnectionId).getCallMedia();
+ const textSource: TextSource = {
+ text: "You are currently in a lobby call, we will notify the admin that you are waiting.",
+ voiceName: "en-US-NancyNeural",
+ kind: "textSource",
+ };
+ const playTo: CommunicationUserIdentifier[] = [{ communicationUserId: lobbyCallerId }];
+ const playOptions: PlayOptions = {
+ operationContext: "playToContext",
+ };
+ await callMedia.play([textSource], playTo, playOptions);
}
- } else if (event.type === 'Microsoft.Communication.CallDisconnected') {
- console.log(`Call disconnected: ${eventData.callConnectionId}`);
- } else {
- // Log other events but don't process them for Move Participants scenario
- console.log(`Received event: ${event.type} - No action needed for Move Participants scenario`);
+ } else if (event.type === "Microsoft.Communication.PlayCompleted") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+
+ // // Notify Target Call user via websocket
+ // if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
+ // console.log("ERROR: Web socket is not available.");
+ // return res.status(404).send("Message sent");
+ // }
+
+ const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
+ // // Notify Client
+ // webSocket.send(confirmMessageToTargetCall);
+ console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+ return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+ } else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+ console.log(`Call Connection Id: ${eventData.callConnectionId}`);
+ console.log(`Correlation Id: ${eventData.correlationId}`);
+ } else if (event.type === "Microsoft.Communication.CallDisconnected") {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log(`Received event: ${event.type}`);
+ console.log(`Call Connection Id: ${eventData.callConnectionId}`);
}
- res.status(200).send();
-});
-app.get('/call-data', (req, res) => {
- console.log("Call Data Endpoint Hit");
- console.log(`call 1: ${callConnectionId1}, call 2: ${callConnectionId2}, call 3: ${callConnectionId3}`);
- res.json({ callConnectionId1, callConnectionId2, callConnectionId3, callerId1, callerId2, callerId3, calleeId1, calleeId2, calleeId3 });
+ res.status(200).send();
});
// GET endpoint to serve the webpage
diff --git a/callautomation-lobbycall-sample/src/app.ts.xxx b/callautomation-lobbycall-sample/src/app.ts.xxx
deleted file mode 100644
index 1cc06e64..00000000
--- a/callautomation-lobbycall-sample/src/app.ts.xxx
+++ /dev/null
@@ -1,277 +0,0 @@
-import { config } from 'dotenv';
-import express, { Application } from 'express';
-import { CommunicationUserIdentifier, PhoneNumberIdentifier } from "@azure/communication-common";
-import {
- CallAutomationClient,
- CallInvite,
- AnswerCallOptions,
- MoveParticipantsOptions
-} from "@azure/communication-call-automation";
-
-config();
-
-const PORT = process.env.PORT;
-const app: Application = express();
-app.use(express.static('webpage'));
-app.use(express.urlencoded({ extended: true }));
-app.use(express.json());
-
-let lobbyCallConnectionId: string;
-let targetCallConnectionId: string;
-let acsGeneratedId: string;
-let acsClient: CallAutomationClient;
-let lobbyCallerId: string;
-const callbackUriHost = process.env.CALLBACK_URI || "";
-const connectionString = process.env.CONNECTION_STRING || ""
-const endpoint = process.env.PMA_ENDPOINT || ""
-
-async function createAcsClient() {
- lobbyCallConnectionId = "";
- targetCallConnectionId = "";
- acsGeneratedId = process.env.ACS_GENERATED_ID || "";
- lobbyCallerId = "";
- // acsClient = new CallAutomationClient(endpoint, connectionString);
- acsClient = new CallAutomationClient(connectionString);
- console.log("Initialized ACS Client.");
-}
-
-app.get('/TargetCallToAcsUser(Create)', async (req, res) => {
- const acsTarget = req.body.acsTarget; // expects { "acsTarget": "" }
- console.log('\n~~~~~~~~~~~~ /TargetCall(Create) ~~~~~~~~~~~~\n');
-
- try {
- const callbackUri = `${callbackUriHost}/api/callbacks`;
- const callInvite = new CommunicationUserIdentifier(acsTarget);
- const createCallOptions = {
- callInvite,
- callbackUri,
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: 'https://cognitive-service-waferwire.cognitiveservices.azure.com/'
- }
- };
-
- const createCallResult = await acsClient.createCall(createCallOptions);
- targetCallConnectionId = createCallResult.callConnectionProperties.callConnectionId;
-
- const logMsg = `
- TargetCall:
- -----------
- From: Call Automation
- To: ${acsTarget}
- Target Call Connection Id: ${targetCallConnectionId}
- Correlation Id: ${createCallResult.callConnectionProperties.correlationId}
- `;
- console.log(logMsg);
- res.type('text/plain').send(logMsg);
- } catch (err) {
- console.error('Error creating call:', err);
- res.status(500).send('Error creating call: ' + err.message);
- }
-});
-
-app.get('/GetParticipants/:callConnectionId', async (req, res) => {
- const callConnectionId = req.params.callConnectionId;
- console.log(`\n~~~~~~~~~~~~ /GetParticipants/${callConnectionId} ~~~~~~~~~~~~\n`);
- try {
- const callConnection = acsClient.getCallConnection(callConnectionId);
- const participantsResponse = await callConnection.getParticipants();
- const participants = participantsResponse.value;
-
- // Format participant info
- const participantInfo = participants.map(p => {
- let type = p.identifier.kind || p.identifier.constructor.name;
- let rawId = p.identifier.rawId;
- let phoneNumber = p.identifier.phoneNumber || null;
- let acsUserId = p.identifier.communicationUserId || null;
-
- return {
- rawId,
- type,
- phoneNumber,
- acsUserId
- };
- });
-
- // Sort: phone numbers first, then ACS users
- participantInfo.sort((a, b) => {
- if (!a.acsUserId && b.acsUserId) return -1;
- if (a.acsUserId && !b.acsUserId) return 1;
- return 0;
- });
-
- // Format output
- if (participantInfo.length === 0) {
- return res.status(404).json({
- message: "No participants found for the specified call connection.",
- callConnectionId
- });
- } else {
- let msg = `\nNo of Participants: ${participantInfo.length}\nParticipants: \n-------------\n`;
- msg += participantInfo.map((p, i) => {
- if (p.acsUserId) {
- return `${i + 1}. ${p.type} - RawId: ${p.acsUserId}`;
- } else {
- return `${i + 1}. ${p.type} - RawId: ${p.rawId}, Phone: ${p.phoneNumber}`;
- }
- }).join('\n');
- console.log(msg);
- return res.type('text/plain').send(msg);
- }
- } catch (ex) {
- console.error(`Error getting participants for call ${callConnectionId}: ${ex.message}`);
- return res.status(400).json({
- error: ex.message,
- callConnectionId
- });
- }
-});
-
-app.get('/terminateCalls', async (req, res) => {
- console.log(`calls 1: ${lobbyCallConnectionId}, 2: ${targetCallConnectionId}`);
- if (lobbyCallConnectionId) {
- try {
- console.log(`Terminating Lobby Call with ID: ${lobbyCallConnectionId}`);
- const lobbyConnection = acsClient.getCallConnection(lobbyCallConnectionId);
- await lobbyConnection.hangUp(true);
- } catch (error) {
- console.error(`Error terminating Lobby Call: ${error.message}`);
- }
- }
- if (targetCallConnectionId) {
- try {
- console.log(`Terminating Target Call with ID: ${targetCallConnectionId}`);
- const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
- await targetConnection.hangUp(true);
- } catch (error) {
- console.error(`Error terminating Target Call: ${error.message}`);
- }
- }
- console.log("Calls hung up successfully.");
- lobbyCallConnectionId = "";
- targetCallConnectionId = "";
- lobbyCallerId = "";
- res.redirect('/');
-});
-
-app.post('/api/LobbyCallSupportEventHandler', async (req, res) => {
- console.log('--------- /api/moveParticipantEvent -------------------');
- const event = req.body[0];
- const eventData = event.data;
- if (event.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") {
- console.log("SubscriptionValidation event");
- res.status(200).json({
- validationResponse: eventData.validationCode,
- });
- return;
- }
-
- // ACS Incoming Call event
- if (event.eventType === 'Microsoft.Communication.IncomingCall') {
- const fromCallerId = eventData.from.rawId;
- const toCallerId = eventData.to.rawId;
-
- console.log(`From Caller Id: ${fromCallerId}`);
- console.log(`To Caller Id : ${toCallerId}`);
-
- // Lobby Call: Answer
- if (toCallerId.includes(acsGeneratedId)) {
- const callbackUri = `${callbackUriHost}/api/callbacks`;
- const options = {
- incomingCallContext: eventData.incomingCallContext,
- callbackUri: callbackUri,
- operationContext: 'LobbyCall',
- callIntelligenceOptions: {
- cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
- }
- };
-
- const answerCallResult = await acsClient.answerCall(options);
- lobbyCallConnectionId = answerCallResult.callConnectionProperties.callConnectionId;
-
- console.log(
- `User Call(Inbound) Answered by Call Automation.`,
- `From Caller Raw Id: ${fromCallerId}`,
- `To Caller Raw Id: ${toCallerId}`,
- `Lobby Call Connection Id: ${lobbyCallConnectionId}`,
- `Correlation Id: ${eventData.correlationId}`,
- `Lobby Call answered successfully.`
- );
- }
- }
-
- res.status(200).send();
-});
-
-app.post('/api/callbacks', async (req, res) => {
- console.log('--------- /api/callbacks -------------------');
- const event = req.body[0];
- const eventData = event.data;
- // For demonstration, log the event type and IDs
- console.log(`Received call event: ${event.type}`);
- console.log(`Correlation id:-> ${eventData.correlationId}`)
-
- if (event.type === "Microsoft.Communication.CallConnected") {
- console.log('\n--------- CallConnected Event Block -------------------');
-
- if ((eventData.operationContext || '') === 'LobbyCall') {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received call event : ${event.type}`);
- console.log(`Lobby Call Connection Id: ${eventData.callConnectionId}`);
- console.log(`Correlation Id: ${eventData.correlationId}`);
-
- // Record lobby caller id and connection id
- const lobbyCallConnection = acsClient.getCallConnection(eventData.callConnectionId);
- const callConnectionProperties = await lobbyCallConnection.getCallConnectionProperties();
- lobbyCallerId = callConnectionProperties.source.rawId;
- lobbyCallConnectionId = callConnectionProperties.callConnectionId;
- console.log(`Lobby Caller Id: ${lobbyCallerId}`);
- console.log(`Lobby Connection Id: ${lobbyCallConnectionId}`);
-
- // Play lobby waiting message
- const callMedia = acsClient.getCallConnection(eventData.callConnectionId).getCallMedia();
- const textSource = new TextSource("You are currently in a lobby call, we will notify the admin that you are waiting.");
- textSource.voiceName = "en-US-NancyNeural";
- const playTo = [new CommunicationUserIdentifier(acsIdentity)];
- const playToOptions = new PlayOptions({ playSource: textSource, playTo });
- playToOptions.operationContext = "playToContext";
- await callMedia.play(playToOptions);
- }
- } else if (event.type === "Microsoft.Communication.PlayCompleted") {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received event: ${event.type}`);
-
- // Notify Target Call user via websocket
- if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
- console.log("ERROR: Web socket is not available.");
- return res.status(404).send("Message sent");
- }
-
- const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
- // Notify Client
- webSocket.send(confirmMessageToTargetCall);
- console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
- return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
- } else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received event: ${event.type}`);
- console.log(`Call Connection Id: ${eventData.callConnectionId}`);
- console.log(`Correlation Id: ${eventData.correlationId}`);
- } else if (event.type === "Microsoft.Communication.CallDisconnected") {
- console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
- console.log(`Received event: ${event.type}`);
- console.log(`Call Connection Id: ${eventData.callConnectionId}`);
- }
-
- res.status(200).send();
-});
-
-// GET endpoint to serve the webpage
-app.get('/', (req, res) => {
- res.sendFile('index.html', { root: 'src/webpage' });
-});
-
-// Start the server
-app.listen(PORT, async () => {
- console.log(`Server is listening on port ${PORT}`);
- await createAcsClient();
-});
diff --git a/callautomation-lobbycall-sample/src/webpage/index.html b/callautomation-lobbycall-sample/src/webpage/index.html
index 30f53350..df1bd9f0 100644
--- a/callautomation-lobbycall-sample/src/webpage/index.html
+++ b/callautomation-lobbycall-sample/src/webpage/index.html
@@ -33,58 +33,38 @@ Lobby Call Sample
STEP 1. Configure Webhook
- Configure Event Grid webhook to point to /api/MoveParticipantEvent endpoint
+ Configure Event Grid webhook to point to /api/lobbyCallSupportEventHandler endpoint
-
STEP 2. Make a Call
- Make a call from User Phone Number to ACS Inbound Phone Number by clicking on this button
-
+ STEP 2. Configure a Lobby Call
+ Make a Lobby call from Web Client App to ACS Generated ACS Identity manually. Once done, lobby call will be in a waiting state.
-
STEP 3a. Create Call 2
- Create a Call for ACS Test Identity 2 by clicking on this button and answer it manually from Web Client App
-
+ STEP 3. Create User Call
+ Create a Call for ACS Identity by clicking on this button and answer it manually from Web Client App
+
-
STEP 3b. Create Call 3
- Create a Call for ACS Test Identity 3 by clicking on this button and answer it manually from Web Client App
-
+ STEP 4. Answer User Call
+ Once User call is connected, a message is played in Lobby asking to answer the User's call. You can accept it or reject it. Accept it manually from Web Client App. Now User is connected to Lobby call.
-
STEP 4a. Move Call
- Move Call for ACS Test Identity 2 to Initial Call
-
+ STEP 5. Get Participants List in Lobby Call
+ The list of all the participants in the Lobby call are automatically refreshed on the right panel.
-
STEP 4b. Move Call
- Move Call for ACS Test Identity 3 to Initial Call
-
-
-
-
STEP 5. Terminate Calls
+ STEP 6. Terminate Calls
Terminate all Calls created so far
-
-
Call Connection 1
-
Call Connection Id: Loading call Id...
-
Caller Id: Loading caller Id...
-
Callee Id: Loading callee Id...
+
+
Lobby Call Info
+
Participant Id 1: Loading participant Id...
+
Participant Id 2: Loading participant Id...
+
Participant Id 3: Loading participant Id...
-
-
Call Connection 2
-
Call Connection Id: Loading call Id...
-
Caller Id: Loading caller Id...
-
Callee Id: Loading callee Id...
-
-
-
Call Connection 3
-
Call Connection Id: Loading call Id...
-
Caller Id: Loading caller Id...
-
Callee Id: Loading callee Id...
-
@@ -97,29 +77,16 @@ Lobby Call Sample
fetch('/call-data')
.then(response => response.json())
.then(data => {
- console.log('Call Connection Id 1:', data.callConnectionId1);
- console.log('Call Connection Id 2:', data.callConnectionId2);
- console.log('Call Connection Id 3:', data.callConnectionId3);
- if (data.callConnectionId1) document.getElementById('callIdA-text').innerText = `${data.callConnectionId1}`;
- if (data.callerId1) document.getElementById('callerIdA-text').innerText = `${data.callerId1}`;
- if (data.calleeId1) document.getElementById('calleeIdA-text').innerText = `${data.calleeId1}`;
- if (data.callConnectionId2) document.getElementById('callIdB-text').innerText = `${data.callConnectionId2}`;
- if (data.callerId2) document.getElementById('callerIdB-text').innerText = `${data.callerId2}`;
- if (data.calleeId2) document.getElementById('calleeIdB-text').innerText = `${data.calleeId2}`;
- if (data.callConnectionId3) document.getElementById('callIdC-text').innerText = `${data.callConnectionId3}`;
- if (data.callerId3) document.getElementById('callerIdC-text').innerText = `${data.callerId3}`;
- if (data.calleeId3) document.getElementById('calleeIdC-text').innerText = `${data.calleeId3}`;
- document.querySelector('input[formaction="/moveParticipant2"]').disabled = true;
- document.querySelector('input[formaction="/moveParticipant3"]').disabled = true;
- document.querySelector('input[formaction="/terminateCalls"]').disabled = true;
- if (data.callConnectionId1 && data.callConnectionId2) {
- document.querySelector('input[formaction="/moveParticipant2"]').disabled = false;
- }
- if (data.callConnectionId1 && data.callConnectionId3) {
- document.querySelector('input[formaction="/moveParticipant3"]').disabled = false;
- }
- if (data.callConnectionId1 || data.callConnectionId2 || data.callConnectionId3) {
+ console.log('Participant Id 1:', data.participantId1);
+ console.log('Participant Id 2:', data.participantId2);
+ console.log('Participant Id 3:', data.participantId3);
+ if (data.participantId1) document.getElementById('pIdA-text').innerText = `${data.participantId1}`;
+ if (data.participantId2) document.getElementById('pIdB-text').innerText = `${data.participantId2}`;
+ if (data.participantId3) document.getElementById('pIdC-text').innerText = `${data.participantId3}`;
+ if (data.participantId1) {
document.querySelector('input[formaction="/terminateCalls"]').disabled = false;
+ } else {
+ document.querySelector('input[formaction="/terminateCalls"]').disabled = true;
}
})
.catch(error => {
From 92ef4159949051070ae049732d7bec04ef34d67f Mon Sep 17 00:00:00 2001
From: nageshy
Date: Mon, 28 Jul 2025 11:21:36 +0530
Subject: [PATCH 06/12] Updated code
---
callautomation-lobbycall-sample/README.md | 2 +-
callautomation-lobbycall-sample/src/app.ts | 2 +-
.../src/webpage/index.html | 39 ++++++++++++++++---
3 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/callautomation-lobbycall-sample/README.md b/callautomation-lobbycall-sample/README.md
index 22595677..9bc2b95d 100644
--- a/callautomation-lobbycall-sample/README.md
+++ b/callautomation-lobbycall-sample/README.md
@@ -3,7 +3,7 @@
|---|---|---|
|sample||azure azure-communication-services
|
-# Lobbay Call Sample using Call Automation SDK
+# Lobby Call Sample using Call Automation SDK
In this quickstart sample, we cover how you can use the Call Automation SDK to perform lobby calls using Azure Communication Services (ACS) calls. This involves creating and managing several outgoing calls simultaneously and dynamically moving participants between these active calls.
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
index 3b2114c1..a24bb6a6 100644
--- a/callautomation-lobbycall-sample/src/app.ts
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -160,7 +160,7 @@ app.get('/targetCallToAcsUser', async (req, res) => {
}
});
-app.get('/call-data', async (req, res) => {
+app.get('/getParticipants', async (req, res) => {
let participantId1 = "";
let participantId2 = "";
let participantId3 = "";
diff --git a/callautomation-lobbycall-sample/src/webpage/index.html b/callautomation-lobbycall-sample/src/webpage/index.html
index df1bd9f0..0b876792 100644
--- a/callautomation-lobbycall-sample/src/webpage/index.html
+++ b/callautomation-lobbycall-sample/src/webpage/index.html
@@ -41,8 +41,12 @@ Lobby Call Sample
STEP 3. Create User Call
- Create a Call for ACS Identity by clicking on this button and answer it manually from Web Client App
-
+ Create a Call for ACS Identity by entering the target ACS User ID and clicking the button. Answer it manually from Web Client App
+
+ ACS Target User ID:
+
+
+
STEP 4. Answer User Call
@@ -73,8 +77,31 @@ Lobby Call Sample
let fetchInterval;
let fetchCount = 0;
- function fetchCallData() {
- fetch('/call-data')
+ function createTargetCall() {
+ const acsTarget = document.getElementById('acsTarget').value.trim();
+
+ if (!acsTarget) {
+ alert('Please enter an ACS Target User ID');
+ return;
+ }
+
+ // Call the API endpoint with the query parameter
+ fetch(`/TargetCallToAcsUser(Create)?acsTarget=${encodeURIComponent(acsTarget)}`)
+ .then(response => response.text())
+ .then(data => {
+ console.log('API Response:', data);
+ alert('Call created successfully!');
+ // Optionally refresh the call data
+ fetchParticipantData();
+ })
+ .catch(error => {
+ console.error('Error creating call:', error);
+ alert('Error creating call: ' + error.message);
+ });
+ }
+
+ function fetchParticipantData() {
+ fetch('/getParticipants')
.then(response => response.json())
.then(data => {
console.log('Participant Id 1:', data.participantId1);
@@ -98,7 +125,7 @@ Lobby Call Sample
fetchCount++;
console.log(`Periodic fetch #${fetchCount}`);
- fetchCallData();
+ fetchParticipantData();
}
function startPeriodicFetch() {
@@ -113,7 +140,7 @@ Lobby Call Sample
}
// Initial fetch on page load
- fetchCallData();
+ fetchParticipantData();
// Add event listener to all form submit buttons
document.addEventListener('DOMContentLoaded', () => {
From 42483ddb725c7cd1a040dec388f4ff39204f04e7 Mon Sep 17 00:00:00 2001
From: nageshy
Date: Mon, 28 Jul 2025 11:33:16 +0530
Subject: [PATCH 07/12] updated code
---
callautomation-lobbycall-sample/README.md | 2 +-
callautomation-lobbycall-sample/src/webpage/index.html | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/callautomation-lobbycall-sample/README.md b/callautomation-lobbycall-sample/README.md
index 9bc2b95d..aec8a2d9 100644
--- a/callautomation-lobbycall-sample/README.md
+++ b/callautomation-lobbycall-sample/README.md
@@ -1,7 +1,7 @@
|page_type|languages|products
|---|---|---|
-|sample||azure azure-communication-services
|
+|sample||azure azure-communication-services
|
# Lobby Call Sample using Call Automation SDK
diff --git a/callautomation-lobbycall-sample/src/webpage/index.html b/callautomation-lobbycall-sample/src/webpage/index.html
index 0b876792..3cd8bc6f 100644
--- a/callautomation-lobbycall-sample/src/webpage/index.html
+++ b/callautomation-lobbycall-sample/src/webpage/index.html
@@ -37,7 +37,7 @@ Lobby Call Sample
STEP 2. Configure a Lobby Call
- Make a Lobby call from Web Client App to ACS Generated ACS Identity manually. Once done, lobby call will be in a waiting state.
+ Make a Lobby call from Web Client App to ACS Generated Identity manually. Once done, lobby call will be in a waiting state.
STEP 3. Create User Call
@@ -86,7 +86,7 @@ Lobby Call Sample
}
// Call the API endpoint with the query parameter
- fetch(`/TargetCallToAcsUser(Create)?acsTarget=${encodeURIComponent(acsTarget)}`)
+ fetch(`/targetCallToAcsUser?acsTarget=${encodeURIComponent(acsTarget)}`)
.then(response => response.text())
.then(data => {
console.log('API Response:', data);
From b04554ebfda092a881dda861f416d34a6ef59159 Mon Sep 17 00:00:00 2001
From: nageshy
Date: Mon, 28 Jul 2025 13:54:50 +0530
Subject: [PATCH 08/12] updated code
---
callautomation-lobbycall-sample/package.json | 4 +-
callautomation-lobbycall-sample/src/app.ts | 172 +++++++++---------
.../src/webpage/index.html | 2 +-
3 files changed, 90 insertions(+), 88 deletions(-)
diff --git a/callautomation-lobbycall-sample/package.json b/callautomation-lobbycall-sample/package.json
index d49147a0..31ae0036 100644
--- a/callautomation-lobbycall-sample/package.json
+++ b/callautomation-lobbycall-sample/package.json
@@ -18,8 +18,10 @@
"@azure/eventgrid": "^4.12.0",
"@types/express": "^4.17.17",
"@types/node": "^20.2.1",
+ "@types/ws": "^8.18.1",
"dotenv": "^16.0.3",
- "express": "^4.18.2"
+ "express": "^4.18.2",
+ "ws": "^8.18.3"
},
"devDependencies": {
"nodemon": "^2.0.22",
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
index a24bb6a6..73a8d47d 100644
--- a/callautomation-lobbycall-sample/src/app.ts
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -8,6 +8,8 @@ import {
PlayOptions,
MoveParticipantsOptions
} from "@azure/communication-call-automation";
+import * as http from 'http';
+import * as WebSocket from 'ws';
config();
@@ -25,7 +27,7 @@ let lobbyCallerId: string;
const callbackUriHost = process.env.CALLBACK_URI || "";
const connectionString = process.env.CONNECTION_STRING || ""
const endpoint = process.env.PMA_ENDPOINT || ""
-// let webSocket = null;
+let webSocket = null;
async function createAcsClient() {
lobbyCallConnectionId = "";
@@ -37,84 +39,82 @@ async function createAcsClient() {
console.log("Initialized ACS Client.");
}
-const http = require('http');
-// const WebSocket = require('ws');
-// const server = http.createServer(app);
+const server = http.createServer(app);
// WebSocket server setup
-// const wss = new WebSocket.Server({ noServer: true });
-
-// server.on('upgrade', (request, socket, head) => {
-// // Only accept connections to the correct path
-// const url = request.url || '';
-// if (url === `/ws/${process.env.SOCKET_TOKEN}`) {
-// wss.handleUpgrade(request, socket, head, function done(ws) {
-// wss.emit('connection', ws, request);
-// });
-// } else {
-// socket.destroy();
-// }
-// });
-
-// wss.on('connection', (ws) => {
-// webSocket = ws;
-// console.log('Received WEB SOCKET request.');
-
-// ws.on('message', async (message) => {
-// const jsResponse = message.toString();
-// console.log(`Received from JS: ${jsResponse}`);
-
-// // Move participant to target call if response is "yes"
-// if (jsResponse.trim().toLowerCase() === 'yes') {
-// console.log('TODO: Move Participant');
-// try {
-// console.log(`
-// ~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~
-// Move Participant operation started..
-// Source Caller Id: ${lobbyCallerId}
-// Source Connection Id: ${lobbyCallConnectionId}
-// Target Connection Id: ${targetCallConnectionId}
-// `);
-
-// // Get the target connection
-// const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
-
-// // Get participants from source connection for reference
-// // const sourceConnection = client.getCallConnection(lobbyConnectionId);
-
-// // Create participant identifier based on the input
-// let participantToMove;
-// if (lobbyCallerId.startsWith('+')) {
-// // Phone number
-// participantToMove = { phoneNumber: lobbyCallerId };
-// console.log(`Moving phone number participant: ${lobbyCallerId}`);
-// } else if (lobbyCallerId.startsWith('8:acs:')) {
-// // ACS Communication User
-// participantToMove = { communicationUserId: lobbyCallerId };
-// console.log(`Moving ACS user participant: ${lobbyCallerId}`);
-// } else {
-// console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
-// }
-
-// // Prepare move participants options
-// const options : MoveParticipantsOptions = {
-// operationContext: "MoveParticipant2"
-// };
-
-// // Call the ACS SDK to move participants
-// await targetConnection.moveParticipants([participantToMove], lobbyCallConnectionId, options);
-
-// console.log('Move Participants operation completed successfully.');
-// } catch (ex) {
-// console.log(`Error in manual move participants operation: ${ex.message}`);
-// }
-// }
-// });
-
-// ws.on('close', () => {
-// webSocket = null;
-// });
-// });
+const wss = new WebSocket.Server({ noServer: true });
+
+server.on('upgrade', (request, socket, head) => {
+ // Only accept connections to the correct path
+ const url = request.url || '';
+ if (url === `/ws/${process.env.SOCKET_TOKEN}`) {
+ wss.handleUpgrade(request, socket, head, function done(ws) {
+ wss.emit('connection', ws, request);
+ });
+ } else {
+ socket.destroy();
+ }
+});
+
+wss.on('connection', (ws) => {
+ webSocket = ws;
+ console.log('Received WEB SOCKET request.');
+
+ ws.on('message', async (message) => {
+ const jsResponse = message.toString();
+ console.log(`Received from JS: ${jsResponse}`);
+
+ // Move participant to target call if response is "yes"
+ if (jsResponse.trim().toLowerCase() === 'yes') {
+ console.log('TODO: Move Participant');
+ try {
+ console.log(`
+ ~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~
+ Move Participant operation started..
+ Source Caller Id: ${lobbyCallerId}
+ Source Connection Id: ${lobbyCallConnectionId}
+ Target Connection Id: ${targetCallConnectionId}
+ `);
+
+ // Get the target connection
+ const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
+
+ // Get participants from source connection for reference
+ // const sourceConnection = client.getCallConnection(lobbyConnectionId);
+
+ // Create participant identifier based on the input
+ let participantToMove;
+ if (lobbyCallerId.startsWith('+')) {
+ // Phone number
+ participantToMove = { phoneNumber: lobbyCallerId };
+ console.log(`Moving phone number participant: ${lobbyCallerId}`);
+ } else if (lobbyCallerId.startsWith('8:acs:')) {
+ // ACS Communication User
+ participantToMove = { communicationUserId: lobbyCallerId };
+ console.log(`Moving ACS user participant: ${lobbyCallerId}`);
+ } else {
+ console.log("Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)");
+ }
+
+ // Prepare move participants options
+ const options : MoveParticipantsOptions = {
+ operationContext: "MoveParticipant2"
+ };
+
+ // Call the ACS SDK to move participants
+ await targetConnection.moveParticipants([participantToMove], lobbyCallConnectionId, options);
+
+ console.log('Move Participants operation completed successfully.');
+ } catch (ex) {
+ console.log(`Error in manual move participants operation: ${ex.message}`);
+ }
+ }
+ });
+
+ ws.on('close', () => {
+ webSocket = null;
+ });
+});
app.get('/targetCallToAcsUser', async (req, res) => {
const acsTarget = req.query.acsTarget as string; // expects ?acsTarget=
@@ -217,8 +217,8 @@ app.get('/terminateCalls', async (req, res) => {
res.redirect('/');
});
-app.post('/api/lobbyCallSupportEventHandler', async (req, res) => {
- console.log('--------- /api/lobbyCallSupportEventHandler -------------------');
+app.post('/api/lobbyCallEventHandler', async (req, res) => {
+ console.log('--------- /api/lobbyCallEventHandler -------------------');
const event = req.body[0];
const eventData = event.data;
if (event.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") {
@@ -310,15 +310,15 @@ app.post('/api/callbacks', async (req, res) => {
console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
console.log(`Received event: ${event.type}`);
- // // Notify Target Call user via websocket
- // if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
- // console.log("ERROR: Web socket is not available.");
- // return res.status(404).send("Message sent");
- // }
+ // Notify Target Call user via websocket
+ if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
+ console.log("ERROR: Web socket is not available.");
+ return res.status(404).send("Message sent");
+ }
const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
- // // Notify Client
- // webSocket.send(confirmMessageToTargetCall);
+ // Notify Client
+ webSocket.send(confirmMessageToTargetCall);
console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
} else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
diff --git a/callautomation-lobbycall-sample/src/webpage/index.html b/callautomation-lobbycall-sample/src/webpage/index.html
index 3cd8bc6f..2c1b44e0 100644
--- a/callautomation-lobbycall-sample/src/webpage/index.html
+++ b/callautomation-lobbycall-sample/src/webpage/index.html
@@ -33,7 +33,7 @@ Lobby Call Sample
STEP 1. Configure Webhook
- Configure Event Grid webhook to point to /api/lobbyCallSupportEventHandler endpoint
+ Configure Event Grid webhook to point to /api/lobbyCallEventHandler endpoint
STEP 2. Configure a Lobby Call
From 954c348ae474a2cd020af269f37a85c1adc9e08a Mon Sep 17 00:00:00 2001
From: nageshy
Date: Tue, 29 Jul 2025 13:33:06 +0530
Subject: [PATCH 09/12] Updated code
---
callautomation-lobbycall-sample/README.md | 6 +-
callautomation-lobbycall-sample/src/app.ts | 182 +++++++++++++++---
.../src/webpage/index.html | 4 +-
3 files changed, 158 insertions(+), 34 deletions(-)
diff --git a/callautomation-lobbycall-sample/README.md b/callautomation-lobbycall-sample/README.md
index aec8a2d9..c1a88c8d 100644
--- a/callautomation-lobbycall-sample/README.md
+++ b/callautomation-lobbycall-sample/README.md
@@ -28,7 +28,7 @@ In this quickstart sample, we cover how you can use the Call Automation SDK to p
```bash
devtunnel create --allow-anonymous
-devtunnel port create -p 8080
+devtunnel port create -p 8443
devtunnel host
```
@@ -36,7 +36,7 @@ devtunnel host
Create/Open the `.env` file to configure the following settings
-1. `PORT`: Assign constant 8080
+1. `PORT`: Assign constant 8443
2. `CONNECTION_STRING`: Azure Communication Service resource's connection string.
3. `COGNITIVE_SERVICES_ENDPOINT` : Cognitive service endpoint.
4. `CALLBACK_URI`: Base url of the app. (For local development replace the dev tunnel url)
@@ -47,5 +47,5 @@ Create/Open the `.env` file to configure the following settings
### Run app locally
1. Open a new Powershell window, cd into the `callautomation-lobbycall-sample` folder and run `npm run dev`
-2. Browser should pop up with the below page. If not navigate it to `http://localhost:8080/`
+2. Browser should pop up with the below page. If not navigate it to `http://localhost:8443/`
3. Follow the steps.
diff --git a/callautomation-lobbycall-sample/src/app.ts b/callautomation-lobbycall-sample/src/app.ts
index 73a8d47d..8c064e92 100644
--- a/callautomation-lobbycall-sample/src/app.ts
+++ b/callautomation-lobbycall-sample/src/app.ts
@@ -1,6 +1,6 @@
import { config } from 'dotenv';
import express, { Application } from 'express';
-import { CommunicationUserIdentifier, getIdentifierRawId } from "@azure/communication-common";
+import { CommunicationUserIdentifier, getIdentifierRawId, isCommunicationUserIdentifier, isPhoneNumberIdentifier, isMicrosoftTeamsUserIdentifier } from "@azure/communication-common";
import {
CallAutomationClient,
CallInvite,
@@ -15,7 +15,7 @@ config();
const PORT = process.env.PORT;
const app: Application = express();
-app.use(express.static('webpage'));
+app.use(express.static('src/webpage'));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
@@ -164,27 +164,55 @@ app.get('/getParticipants', async (req, res) => {
let participantId1 = "";
let participantId2 = "";
let participantId3 = "";
- if (lobbyCallConnectionId) {
- console.log(`\n~~~~~~~~~~~~ /GetParticipants/${lobbyCallConnectionId} ~~~~~~~~~~~~\n`);
+ if (targetCallConnectionId) {
+ console.log(`\n~~~~~~~~~~~~ /GetParticipants/${targetCallConnectionId} ~~~~~~~~~~~~\n`);
try {
- const callConnection = acsClient.getCallConnection(lobbyCallConnectionId);
+ const callConnection = acsClient.getCallConnection(targetCallConnectionId);
const participantsResponse = await callConnection.listParticipants();
const participants = participantsResponse.values;
+ // alert(`JSON.stringify(participants)`);
+ console.log(`Participants: ${JSON.stringify(participants)}`);
if (participants.length === 0) {
- console.log(`No participants found in call ${lobbyCallConnectionId}`);
- } else if (participants.length === 1) {
- participantId1 = participants[0].identifier.toString();
- } else if (participants.length === 2) {
- participantId1 = participants[0].identifier.toString();
- participantId2 = participants[1].identifier.toString();
- } else if (participants.length === 3) {
- participantId1 = participants[0].identifier.toString();
- participantId2 = participants[1].identifier.toString();
- participantId3 = participants[2].identifier.toString();
+ console.log(`No participants found in call ${targetCallConnectionId}`);
+ } else if (participants.length >= 1) {
+ const id1 = participants[0].identifier;
+ if (isCommunicationUserIdentifier(id1)) {
+ participantId1 = id1.communicationUserId;
+ } else if (isPhoneNumberIdentifier(id1)) {
+ participantId1 = id1.phoneNumber;
+ } else if (isMicrosoftTeamsUserIdentifier(id1)) {
+ participantId1 = id1.microsoftTeamsUserId;
+ } else {
+ participantId1 = "Unknown";
+ }
+ }
+ if (participants.length >= 2) {
+ const id2 = participants[1].identifier;
+ if (isCommunicationUserIdentifier(id2)) {
+ participantId2 = id2.communicationUserId;
+ } else if (isPhoneNumberIdentifier(id2)) {
+ participantId2 = id2.phoneNumber;
+ } else if (isMicrosoftTeamsUserIdentifier(id2)) {
+ participantId2 = id2.microsoftTeamsUserId;
+ } else {
+ participantId2 = "Unknown";
+ }
+ }
+ if (participants.length >= 3) {
+ const id3 = participants[2].identifier;
+ if (isCommunicationUserIdentifier(id3)) {
+ participantId3 = id3.communicationUserId;
+ } else if (isPhoneNumberIdentifier(id3)) {
+ participantId3 = id3.phoneNumber;
+ } else if (isMicrosoftTeamsUserIdentifier(id3)) {
+ participantId3 = id3.microsoftTeamsUserId;
+ } else {
+ participantId3 = "Unknown";
+ }
}
} catch (ex) {
- console.error(`Error getting participants for call ${lobbyCallConnectionId}: ${ex.message}`);
+ console.error(`Error getting participants for call ${targetCallConnectionId}: ${ex.message}`);
}
}
res.json({ participantId1, participantId2, participantId3 });
@@ -268,6 +296,73 @@ app.post('/api/lobbyCallEventHandler', async (req, res) => {
res.status(200).send();
});
+// app.post('/api/callbacks', async (req, res) => {
+// console.log('--------- /api/callbacks -------------------');
+// const event = req.body[0];
+// const eventData = event.data;
+// // For demonstration, log the event type and IDs
+// console.log(`Received call event: ${event.type}`);
+// console.log(`Correlation id:-> ${eventData.correlationId}`)
+
+// if (event.type === "Microsoft.Communication.CallConnected") {
+// console.log('\n--------- CallConnected Event Block -------------------');
+
+// if ((eventData.operationContext || '') === 'LobbyCall') {
+// console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+// console.log(`Received call event : ${event.type}`);
+// console.log(`Lobby Call Connection Id: ${eventData.callConnectionId}`);
+// console.log(`Correlation Id: ${eventData.correlationId}`);
+
+// // Record lobby caller id and connection id
+// const lobbyCallConnection = acsClient.getCallConnection(eventData.callConnectionId);
+// const callConnectionProperties = await lobbyCallConnection.getCallConnectionProperties();
+// lobbyCallerId = getIdentifierRawId(callConnectionProperties.source);
+// lobbyCallConnectionId = callConnectionProperties.callConnectionId;
+// console.log(`Lobby Caller Id: ${lobbyCallerId}`);
+// console.log(`Lobby Connection Id: ${lobbyCallConnectionId}`);
+
+// // Play lobby waiting message
+// const callMedia = acsClient.getCallConnection(eventData.callConnectionId).getCallMedia();
+// const textSource: TextSource = {
+// text: "You are currently in a lobby call, we will notify the admin that you are waiting.",
+// voiceName: "en-US-NancyNeural",
+// kind: "textSource",
+// };
+// const playTo: CommunicationUserIdentifier[] = [{ communicationUserId: lobbyCallerId }];
+// const playOptions: PlayOptions = {
+// operationContext: "playToContext",
+// };
+// await callMedia.play([textSource], playTo, playOptions);
+// }
+// } else if (event.type === "Microsoft.Communication.PlayCompleted") {
+// console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+// console.log(`Received event: ${event.type}`);
+
+// // Notify Target Call user via websocket
+// if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
+// console.log("ERROR: Web socket is not available.");
+// return res.status(404).send("Message sent");
+// }
+
+// const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
+// // Notify Client
+// webSocket.send(confirmMessageToTargetCall);
+// console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+// return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+// } else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
+// console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+// console.log(`Received event: ${event.type}`);
+// console.log(`Call Connection Id: ${eventData.callConnectionId}`);
+// console.log(`Correlation Id: ${eventData.correlationId}`);
+// } else if (event.type === "Microsoft.Communication.CallDisconnected") {
+// console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+// console.log(`Received event: ${event.type}`);
+// console.log(`Call Connection Id: ${eventData.callConnectionId}`);
+// }
+
+// res.status(200).send();
+// });
+
app.post('/api/callbacks', async (req, res) => {
console.log('--------- /api/callbacks -------------------');
const event = req.body[0];
@@ -307,20 +402,49 @@ app.post('/api/callbacks', async (req, res) => {
await callMedia.play([textSource], playTo, playOptions);
}
} else if (event.type === "Microsoft.Communication.PlayCompleted") {
+ // Log event
console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
console.log(`Received event: ${event.type}`);
- // Notify Target Call user via websocket
- if (!webSocket || webSocket.readyState !== 1) { // 1 = OPEN
- console.log("ERROR: Web socket is not available.");
- return res.status(404).send("Message sent");
- }
+ // Move Participant logic
+ try {
+ console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
+ console.log('Move Participant operation started..');
+ console.log(`Source Caller Id: ${lobbyCallerId}`);
+ console.log(`Source Connection Id: ${lobbyCallConnectionId}`);
+ console.log(`Target Connection Id: ${targetCallConnectionId}`);
+
+ // Get the target connection
+ const targetConnection = acsClient.getCallConnection(targetCallConnectionId);
- const confirmMessageToTargetCall = "A user is waiting in lobby, do you want to add the user to your call?";
- // Notify Client
- webSocket.send(confirmMessageToTargetCall);
- console.log(`Target Call notified with message: ${confirmMessageToTargetCall}`);
- return res.status(200).send(`Target Call notified with message: ${confirmMessageToTargetCall}`);
+ // Get participants from source connection for reference (optional)
+ // const sourceConnection = client.getCallConnection(lobbyConnectionId);
+
+ // Create participant identifier based on the input
+ let participantToMove;
+ if (lobbyCallerId.startsWith('+')) {
+ // Phone number
+ participantToMove = { kind: 'phoneNumber', phoneNumber: lobbyCallerId };
+ } else if (lobbyCallerId.startsWith('8:acs:')) {
+ // ACS Communication User
+ participantToMove = { kind: 'communicationUser', communicationUserId: lobbyCallerId };
+ } else {
+ res.status(400).send('Invalid participant format. Use phone number (+1234567890) or ACS user ID (8:acs:...)');
+ return;
+ }
+
+ // Move participant
+ const response = await targetConnection.moveParticipants([participantToMove], lobbyCallConnectionId);
+
+ console.log('\nMove Participants operation completed successfully.');
+ } catch (ex) {
+ console.log(`Error in manual move participants operation: ${ex.message}`);
+ res.status(400).json({
+ Success: false,
+ Error: ex.message,
+ Message: 'Move participants operation failed.'
+ });
+ }
} else if (event.type === "Microsoft.Communication.MoveParticipantsSucceeded") {
console.log('~~~~~~~~~~~~ /api/callbacks ~~~~~~~~~~~~');
console.log(`Received event: ${event.type}`);
@@ -340,8 +464,8 @@ app.get('/', (req, res) => {
res.sendFile('index.html', { root: 'src/webpage' });
});
-// Start the server
-app.listen(PORT, async () => {
- console.log(`Server is listening on port ${PORT}`);
+// Start the server using the HTTP server (not app.listen)
+server.listen(Number(PORT), '0.0.0.0', async () => {
+ console.log(`Server is listening on port ${PORT} on all interfaces`);
await createAcsClient();
});
diff --git a/callautomation-lobbycall-sample/src/webpage/index.html b/callautomation-lobbycall-sample/src/webpage/index.html
index 2c1b44e0..08d7aa62 100644
--- a/callautomation-lobbycall-sample/src/webpage/index.html
+++ b/callautomation-lobbycall-sample/src/webpage/index.html
@@ -42,9 +42,9 @@ Lobby Call Sample
STEP 3. Create User Call
Create a Call for ACS Identity by entering the target ACS User ID and clicking the button. Answer it manually from Web Client App
-