@microsoft/agents-hosting 1.4.0-beta.7.g541749904d → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/package.json +5 -5
  2. package/dist/src/app/adaptiveCards/activityValueParsers.d.ts +2 -1
  3. package/dist/src/app/adaptiveCards/adaptiveCardsSearchParams.d.ts +1 -0
  4. package/dist/src/app/adaptiveCards/adaptiveCardsSearchParams.js +1 -0
  5. package/dist/src/app/adaptiveCards/adaptiveCardsSearchParams.js.map +1 -1
  6. package/dist/src/app/agentApplication.d.ts +17 -9
  7. package/dist/src/app/agentApplication.js +94 -80
  8. package/dist/src/app/agentApplication.js.map +1 -1
  9. package/dist/src/app/auth/authorizationManager.d.ts +7 -2
  10. package/dist/src/app/auth/authorizationManager.js +10 -9
  11. package/dist/src/app/auth/authorizationManager.js.map +1 -1
  12. package/dist/src/app/auth/handlers/azureBotAuthorization.d.ts +1 -1
  13. package/dist/src/app/auth/handlers/azureBotAuthorization.js +3 -3
  14. package/dist/src/app/auth/handlers/azureBotAuthorization.js.map +1 -1
  15. package/dist/src/app/streaming/streamingResponse.js +3 -3
  16. package/dist/src/app/streaming/streamingResponse.js.map +1 -1
  17. package/dist/src/auth/authConfiguration.d.ts +8 -0
  18. package/dist/src/auth/authConfiguration.js +24 -2
  19. package/dist/src/auth/authConfiguration.js.map +1 -1
  20. package/dist/src/auth/jwt-middleware.d.ts +7 -0
  21. package/dist/src/auth/jwt-middleware.js +14 -3
  22. package/dist/src/auth/jwt-middleware.js.map +1 -1
  23. package/dist/src/auth/msalConnectionManager.js +3 -2
  24. package/dist/src/auth/msalConnectionManager.js.map +1 -1
  25. package/dist/src/auth/msalTokenProvider.js +12 -19
  26. package/dist/src/auth/msalTokenProvider.js.map +1 -1
  27. package/dist/src/cloudAdapter.d.ts +4 -0
  28. package/dist/src/cloudAdapter.js +5 -0
  29. package/dist/src/cloudAdapter.js.map +1 -1
  30. package/dist/src/index.d.ts +1 -1
  31. package/dist/src/index.js +2 -1
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/turnContext.js +7 -1
  34. package/dist/src/turnContext.js.map +1 -1
  35. package/package.json +5 -5
  36. package/src/app/adaptiveCards/activityValueParsers.ts +1 -1
  37. package/src/app/adaptiveCards/adaptiveCardsSearchParams.ts +1 -0
  38. package/src/app/agentApplication.ts +97 -79
  39. package/src/app/auth/authorizationManager.ts +16 -11
  40. package/src/app/auth/handlers/azureBotAuthorization.ts +4 -4
  41. package/src/app/streaming/streamingResponse.ts +3 -3
  42. package/src/auth/authConfiguration.ts +24 -2
  43. package/src/auth/jwt-middleware.ts +14 -4
  44. package/src/auth/msalConnectionManager.ts +3 -3
  45. package/src/auth/msalTokenProvider.ts +11 -21
  46. package/src/cloudAdapter.ts +5 -0
  47. package/src/index.ts +1 -1
  48. package/src/turnContext.ts +6 -1
package/dist/src/index.js CHANGED
@@ -18,10 +18,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.HostingErrors = exports.authorizeJWT = void 0;
21
+ exports.HostingErrors = exports.buildJwksUri = exports.authorizeJWT = void 0;
22
22
  __exportStar(require("./auth/"), exports);
23
23
  var jwt_middleware_1 = require("./auth/jwt-middleware");
24
24
  Object.defineProperty(exports, "authorizeJWT", { enumerable: true, get: function () { return jwt_middleware_1.authorizeJWT; } });
25
+ Object.defineProperty(exports, "buildJwksUri", { enumerable: true, get: function () { return jwt_middleware_1.buildJwksUri; } });
25
26
  __exportStar(require("./app"), exports);
26
27
  __exportStar(require("./cards"), exports);
27
28
  __exportStar(require("./connector-client"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,0CAAuB;AACvB,wDAAoD;AAA3C,8GAAA,YAAY,OAAA;AAErB,wCAAqB;AACrB,0CAAuB;AACvB,qDAAkC;AAClC,6CAAuD;AAA9C,4GAAA,MAAM,OAAiB;AAChC,2CAAwB;AACxB,0CAAuB;AACvB,0CAAuB;AACvB,4CAAyB;AACzB,+CAA4B;AAE5B,oDAAiC;AACjC,gDAA6B;AAC7B,iDAA8B;AAC9B,kDAA+B;AAC/B,mDAAgC;AAChC,gDAA6B;AAC7B,gDAA6B;AAC7B,+DAA4C;AAC5C,oDAAiC;AACjC,sDAAmC;AAEnC,iDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,0CAAuB;AACvB,wDAAkE;AAAzD,8GAAA,YAAY,OAAA;AAAE,8GAAA,YAAY,OAAA;AAEnC,wCAAqB;AACrB,0CAAuB;AACvB,qDAAkC;AAClC,6CAAuD;AAA9C,4GAAA,MAAM,OAAiB;AAChC,2CAAwB;AACxB,0CAAuB;AACvB,0CAAuB;AACvB,4CAAyB;AACzB,+CAA4B;AAE5B,oDAAiC;AACjC,gDAA6B;AAC7B,iDAA8B;AAC9B,kDAA+B;AAC/B,mDAAgC;AAChC,gDAA6B;AAC7B,gDAA6B;AAC7B,+DAA4C;AAC5C,oDAAiC;AACjC,sDAAmC;AAEnC,iDAA8B"}
@@ -271,7 +271,13 @@ class TurnContext {
271
271
  * @protected
272
272
  */
273
273
  copyTo(context) {
274
- ['_adapter', '_activity', '_respondedRef', '_services', '_onSendActivities', '_onUpdateActivity', '_onDeleteActivity'].forEach((prop) => (context[prop] = this[prop]));
274
+ // Skip _streamingResponse: it holds a reference to the HTTP response of the original request.
275
+ // Copying it to a cloned context would cause the clone to write to an already-completed response.
276
+ const copyableProperties = Object.keys(this).filter((prop) => prop !== '_streamingResponse');
277
+ for (const prop of copyableProperties) {
278
+ ;
279
+ context[prop] = this[prop];
280
+ }
275
281
  }
276
282
  /**
277
283
  * Gets the adapter that created this context.
@@ -1 +1 @@
1
- {"version":3,"file":"turnContext.js","sourceRoot":"","sources":["../../src/turnContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turnContext.js","sourceRoot":"","sources":["../../src/turnContext.ts"],"names":[],"mappings":";;;AAAA,oGAAoG;AACpG,uDAAuD;AAEvD,gEAAsH;AAEtH,6EAAyE;AAGzE,yEAAqE;AAiCrE;;GAEG;AACU,QAAA,uBAAuB,GAAG,sBAAsB,CAAA;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,WAAW;IAqBtB,YAAa,gBAA2C,EAAE,OAAkB,EAAE,QAAqB;QAlBlF,kBAAa,GAA2B,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QAC5D,eAAU,GAAG,IAAI,uDAA0B,EAAE,CAAA;QAC7C,sBAAiB,GAA4B,EAAE,CAAA;QAC/C,sBAAiB,GAA4B,EAAE,CAAA;QAC/C,sBAAiB,GAA4B,EAAE,CAAA;QAC/C,UAAK,GAAG,MAAM,CAAA;QACd,YAAO,GAAG,QAAQ,CAAA;QAuBnC;;;;;WAKG;QACM,4BAAuB,GAAe,EAAE,CAAA;QAhB/C,IAAI,gBAAgB,YAAY,WAAW,EAAE,CAAC;YAC5C,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAA;YAChC,IAAI,CAAC,SAAS,GAAG,OAAmB,CAAA;YACpC,IAAI,CAAC,SAAS,GAAG,QAAsB,CAAA;QACzC,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAUD;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,iBAAiB,CAAE,IAAY,EAAE,KAAW,EAAE,SAAkB,EAAE,KAAc;QACpF,MAAM,aAAa,GAAG;YACpB,IAAI,EAAE,+BAAa,CAAC,KAAK;YACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI;YACJ,KAAK;YACL,SAAS;YACT,KAAK;SACM,CAAA;QACb,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,YAAY,CAAE,cAAiC,EAAE,KAAc,EAAE,SAAkB;QACvF,IAAI,QAAkB,CAAA;QACtB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,QAAQ,GAAG,EAAE,IAAI,EAAE,+BAAa,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,IAAI,4BAAU,CAAC,cAAc,EAAc,CAAA;YAC/H,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,cAAc,CAAA;QAC3B,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC/D,OAAO,SAAS,CAAC,CAAC,CAAC,CAAA;IACrB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,cAAc,CAAE,UAAsB;QAC1C,IAAI,oBAAoB,GAAG,KAAK,CAAA;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAA;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACzC,MAAM,WAAW,GAAG,0BAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;YACjD,MAAM,MAAM,GAAG,WAAW,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAA;YAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,GAAG,+BAAa,CAAC,OAAO,CAAA;YACrC,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,+BAAa,CAAC,cAAc,EAAE,CAAC;gBACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qCAAmB,EAAE,MAAM,CAAC,CAAA;YACjD,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,+BAAa,CAAC,KAAK,EAAE,CAAC;gBACxC,oBAAoB,GAAG,IAAI,CAAA;YAC7B,CAAC;YACD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,MAAM,CAAC,EAAE,CAAA;YAClB,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YAChE,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,KAAK,+BAAa,CAAC,aAAa,EAAE,CAAC;gBAC/D,MAAM,SAAS,GAAuB,EAAE,CAAA;gBACxC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACnB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACpC,IAAI,CAAC,CAAC,IAAI,KAAK,+BAAa,CAAC,cAAc,EAAE,CAAC;wBAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qCAAmB,EAAE,CAAC,CAAC,CAAA;oBAC5C,CAAC;oBACD,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;gBAC5B,CAAC,CAAC,CAAA;gBACF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;gBACvB,CAAC;gBACD,OAAO,SAAS,CAAA;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBACjE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EAAE,KAAK,EAAE,EAAE,CAAC;oBACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;oBAC9B,QAAQ,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;gBACnC,CAAC;gBACD,IAAI,oBAAoB,EAAE,CAAC;oBACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;gBACvB,CAAC;gBACD,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,cAAc,CAAE,QAAkB;QACtC,MAAM,WAAW,GAAG,0BAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAA;QACpD,MAAM,CAAC,GAAG,WAAW,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAA;QACrD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAC3D,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAC1D,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAE,aAA6C;QACjE,IAAI,SAAgC,CAAA;QACpC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAA;YACpD,SAAS,CAAC,UAAU,GAAG,aAAa,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,aAAa,CAAA;QAC3B,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;IAC3H,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CAAE,cAAsB,EAAE,cAA8B;QAC5E,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;IAClF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,CAAE,YAAoB;QAC3C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACjE,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,aAAa,CAAE,YAAoB,EAAE,MAAc;QACvD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;IACrE,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAE,OAA8B;QAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAE,OAA8B;QAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAE,OAA8B;QAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;OAOG;IACO,MAAM,CAAE,OAAoB;QACpC,8FAA8F;QAC9F,kGAAkG;QAClG,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAA;QAC5F,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;YACtC,CAAC;YAAC,OAAe,CAAC,IAAI,CAAC,GAAI,IAAY,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAuB,CAAA;IACrC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAqB,CAAA;IACnC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAuB,CAAA;IACrC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAA;IACrC,CAAC;IAED,IAAI,SAAS,CAAE,KAAc;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;QAC/E,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAA;IACrC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,MAAM;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/C,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACzD,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM,CAAE,KAAyB;QACnC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA;YACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAA;IAChC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,KAAK,CAAC,IAAI,CAAO,QAAqF,EAAE,GAAM,EAAE,IAAsB;QAC5I,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAkB,EAAc,EAAE;YACjF,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YACrH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAClC,CAAC;QACH,CAAC,CAAA;QACD,OAAO,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC;CACF;AAlYD,kCAkYC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@microsoft/agents-hosting",
4
- "version": "1.4.0-beta.7.g541749904d",
4
+ "version": "1.4.2",
5
5
  "homepage": "https://github.com/microsoft/Agents-for-js",
6
6
  "repository": {
7
7
  "type": "git",
@@ -20,11 +20,11 @@
20
20
  "types": "dist/src/index.d.ts",
21
21
  "dependencies": {
22
22
  "@azure/core-auth": "^1.10.1",
23
- "@azure/msal-node": "^5.0.4",
24
- "@microsoft/agents-activity": "1.4.0-beta.7.g541749904d",
25
- "axios": "^1.13.5",
23
+ "@azure/msal-node": "^5.0.6",
24
+ "@microsoft/agents-activity": "1.4.2",
25
+ "axios": "^1.13.6",
26
26
  "jsonwebtoken": "^9.0.3",
27
- "jwks-rsa": "^3.2.2",
27
+ "jwks-rsa": "^4.0.1",
28
28
  "object-path": "^0.11.8",
29
29
  "zod": "3.25.75"
30
30
  },
@@ -50,7 +50,7 @@ export function parseValueContinuation (value: unknown): string {
50
50
  return value as string
51
51
  }
52
52
 
53
- export interface ValueAction {
53
+ interface ValueAction {
54
54
  action: {
55
55
  type: string;
56
56
  verb: string;
@@ -21,6 +21,7 @@ export interface AdaptiveCardsSearchParams {
21
21
 
22
22
  /**
23
23
  * Zod schema for validating AdaptiveCardsSearchParams.
24
+ * @ignore
24
25
  */
25
26
  export const adaptiveCardsSearchParamsZodSchema = z.object({
26
27
  queryText: z.string(),
@@ -583,10 +583,10 @@ export class AgentApplication<TState extends TurnState> {
583
583
  * While this method is public, it's typically called internally by the `run` method.
584
584
  *
585
585
  * The method performs the following operations:
586
- * 1. Starts typing timer if configured
587
- * 2. Processes mentions if configured
588
- * 3. Loads turn state
589
- * 4. Handles authentication flows
586
+ * 1. Handles authentication flows for routes that have auth handlers configured. If NOT authorized, it will not continue with the 2nd step, returning false.
587
+ * 2. Starts typing timer if configured
588
+ * 3. Processes mentions if configured
589
+ * 4. Loads turn state
590
590
  * 5. Downloads files if file downloaders are configured
591
591
  * 6. Executes before-turn event handlers
592
592
  * 7. Routes to appropriate handlers
@@ -600,76 +600,98 @@ export class AgentApplication<TState extends TurnState> {
600
600
  * console.log('No handler matched the activity');
601
601
  * }
602
602
  * ```
603
- *
604
603
  */
605
604
  public async runInternal (turnContext: TurnContext): Promise<boolean> {
606
- if (turnContext.activity.type === ActivityTypes.Typing) {
605
+ const { authorized, context } = await this.handleAuthorization(turnContext)
606
+
607
+ if (!authorized) {
608
+ // We don't log a message here because it is handled by the authorization manager and could cause confusion during mid sign-in operations.
607
609
  return false
608
610
  }
609
611
 
610
- logger.info('Running application with activity:', turnContext.activity.id!)
611
- return await this.startLongRunningCall(turnContext, async (context) => {
612
- try {
613
- if (this._options.startTypingTimer) {
614
- this.startTypingTimer(context)
615
- }
612
+ const isLongRunning =
613
+ (turnContext.activity.type === ActivityTypes.Invoke && turnContext.activity.name === 'signin/tokenExchange') ||
614
+ (this._options.longRunningMessages && turnContext.activity.type === ActivityTypes.Message)
616
615
 
617
- if (this._options.removeRecipientMention && context.activity.type === ActivityTypes.Message) {
618
- context.activity.removeRecipientMention()
619
- }
616
+ if (isLongRunning) {
617
+ logger.debug('Starting long-running messages for activity:', context.activity.id!)
618
+ this.startLongRunningCall(context, ctx => this.runTurn(ctx))
619
+ return true
620
+ }
620
621
 
621
- if (this._options.normalizeMentions && context.activity.type === ActivityTypes.Message) {
622
- context.activity.normalizeMentions()
623
- }
622
+ logger.info('Running application with activity:', context.activity.id!)
623
+ return this.runTurn(context)
624
+ }
624
625
 
625
- const { storage, turnStateFactory } = this._options
626
- const state = turnStateFactory()
627
- await state.load(context, storage)
626
+ /**
627
+ * Determines if the incoming activity is authorized to be processed by the application.
628
+ * @returns An object containing the authorization status and the context (could have the continuation activity) to be used for further processing.
629
+ */
630
+ private async handleAuthorization (context: TurnContext) {
631
+ if (context.activity.type === ActivityTypes.Typing) {
632
+ return { authorized: true, context }
633
+ }
628
634
 
629
- const { authorized } = await this._authorizationManager?.process(context, async activity => {
630
- // The incoming activity may come from the storage, so we need to restore the auth handlers.
631
- // Since the current route may not have auth handlers.
632
- const route = await this.getRoute(new TurnContext(context.adapter, activity, turnContext.identity))
633
- return route?.authHandlers ?? []
634
- }) ?? { authorized: true } // Default to authorized if no auth manager
635
+ return this._authorizationManager?.process(context, async activity => {
636
+ // The incoming activity may come from the storage, so we need to restore the auth handlers.
637
+ // Since the current route may not have auth handlers.
638
+ const route = await this.getRoute(new TurnContext(context.adapter, activity, context.identity))
639
+ return route?.authHandlers ?? []
640
+ }) ?? { authorized: true, context } // If no authorization manager is configured, we assume the activity is authorized.
641
+ }
635
642
 
636
- if (!authorized) {
637
- await state.save(context, storage)
638
- return false
639
- }
643
+ /**
644
+ * Executes the turn processing logic for the given context, including routing and handler execution.
645
+ */
646
+ private async runTurn (context: TurnContext): Promise<boolean> {
647
+ try {
648
+ if (this._options.startTypingTimer) {
649
+ this.startTypingTimer(context)
650
+ }
640
651
 
641
- const route = await this.getRoute(context)
652
+ if (this._options.removeRecipientMention && context.activity.type === ActivityTypes.Message) {
653
+ context.activity.removeRecipientMention()
654
+ }
642
655
 
643
- if (!route) {
644
- logger.debug('No matching route found for activity:', context.activity)
645
- return false
646
- }
656
+ if (this._options.normalizeMentions && context.activity.type === ActivityTypes.Message) {
657
+ context.activity.normalizeMentions()
658
+ }
647
659
 
648
- if (Array.isArray(this._options.fileDownloaders) && this._options.fileDownloaders.length > 0) {
649
- for (let i = 0; i < this._options.fileDownloaders.length; i++) {
650
- await this._options.fileDownloaders[i].downloadAndStoreFiles(context, state)
651
- }
652
- }
660
+ const { storage, turnStateFactory } = this._options
661
+ const state = turnStateFactory()
662
+ await state.load(context, storage)
653
663
 
654
- if (!(await this.callEventHandlers(context, state, this._beforeTurn))) {
655
- await state.save(context, storage)
656
- return false
657
- }
664
+ const route = await this.getRoute(context)
658
665
 
659
- await route.handler(context, state)
666
+ if (!route) {
667
+ logger.debug('No matching route found for activity:', context.activity)
668
+ return false
669
+ }
660
670
 
661
- if (await this.callEventHandlers(context, state, this._afterTurn)) {
662
- await state.save(context, storage)
671
+ if (Array.isArray(this._options.fileDownloaders) && this._options.fileDownloaders.length > 0) {
672
+ for (let i = 0; i < this._options.fileDownloaders.length; i++) {
673
+ await this._options.fileDownloaders[i].downloadAndStoreFiles(context, state)
663
674
  }
675
+ }
664
676
 
665
- return true
666
- } catch (err: any) {
667
- logger.error(err)
668
- throw err
669
- } finally {
670
- this.stopTypingTimer()
677
+ if (!(await this.callEventHandlers(context, state, this._beforeTurn))) {
678
+ await state.save(context, storage)
679
+ return false
671
680
  }
672
- })
681
+
682
+ await route.handler(context, state)
683
+
684
+ if (await this.callEventHandlers(context, state, this._afterTurn)) {
685
+ await state.save(context, storage)
686
+ }
687
+
688
+ return true
689
+ } catch (err: any) {
690
+ logger.error(err)
691
+ throw err
692
+ } finally {
693
+ this.stopTypingTimer()
694
+ }
673
695
  }
674
696
 
675
697
  /**
@@ -900,35 +922,31 @@ export class AgentApplication<TState extends TurnState> {
900
922
  }
901
923
 
902
924
  /**
903
- * Starts a long-running call, potentially in a new conversation context.
925
+ * Starts a long-running call by continuing the conversation asynchronously (fire-and-forget).
926
+ * The current request/response cycle is not blocked; errors are forwarded to the adapter's error handler.
904
927
  *
905
928
  * @param context - The turn context for the current conversation.
906
- * @param handler - The handler function to execute.
907
- * @returns A promise that resolves to the result of the handler.
929
+ * @param handler - The handler function to execute in the continued conversation.
908
930
  */
909
931
  protected startLongRunningCall (
910
932
  context: TurnContext,
911
- handler: (context: TurnContext) => Promise<boolean>
912
- ): Promise<boolean> {
913
- if (context.activity.type === ActivityTypes.Message && this._options.longRunningMessages) {
914
- return new Promise<boolean>((resolve, reject) => {
915
- this.continueConversationAsync(context.identity, context, async (ctx) => {
916
- try {
917
- for (const key in context.activity) {
918
- (ctx.activity as any)[key] = (context.activity as any)[key]
919
- }
920
-
921
- const result = await handler(ctx)
922
- resolve(result)
923
- } catch (err: any) {
924
- logger.error(err)
925
- reject(err)
926
- }
927
- })
928
- })
929
- } else {
930
- return handler(context)
931
- }
933
+ handler: (context: TurnContext) => Promise<any>
934
+ ) {
935
+ const activity = Activity.fromObject(context.activity)
936
+ this.continueConversationAsync(context.identity, activity.getConversationReference(), async (ctx) => {
937
+ try {
938
+ Object.assign(ctx.activity, activity)
939
+ await handler(ctx)
940
+ } catch (err) {
941
+ if (this.adapter.onTurnError && err instanceof Error) {
942
+ await this.adapter.onTurnError(ctx, err)
943
+ } else {
944
+ throw err
945
+ }
946
+ }
947
+ }).catch(err => {
948
+ logger.error(`Unhandled error in long-running call for activity '${activity.type}' (id: ${activity.id}):`, err)
949
+ })
932
950
  }
933
951
 
934
952
  /**
@@ -24,17 +24,21 @@ interface ManagerActiveHandler {
24
24
  /**
25
25
  * Result of the authorization manager process.
26
26
  */
27
- export interface AuthorizationManagerProcessResult {
27
+ interface AuthorizationManagerProcessResult {
28
28
  /**
29
29
  * Indicates whether the authorization was successful.
30
30
  */
31
31
  authorized: boolean;
32
+ /**
33
+ * The context associated with the authorization process.
34
+ */
35
+ context: TurnContext;
32
36
  }
33
37
 
34
38
  /**
35
39
  * Function to retrieve handler IDs for the current activity.
36
40
  */
37
- export type GetHandlerIds = (activity: Activity) => string[] | Promise<string[]>
41
+ type GetHandlerIds = (activity: Activity) => string[] | Promise<string[]>
38
42
 
39
43
  /**
40
44
  * Manages multiple authorization handlers and their interactions.
@@ -111,13 +115,16 @@ export class AuthorizationManager {
111
115
  if (active !== undefined && active?.data.activity.conversation?.id !== context.activity.conversation?.id) {
112
116
  logger.warn('Discarding the active session due to the conversation has changed during an active sign-in process', active?.data.activity)
113
117
  await storage.delete()
114
- return { authorized: true }
118
+ return { authorized: true, context }
115
119
  }
116
120
 
117
121
  const handlers = active?.handlers ?? this.mapHandlers(await getHandlerIds(context.activity) ?? []) ?? []
118
122
 
123
+ // Create a shallow copy to modify the activity, since the signin process depends on it and we want to ensure the next handler depends on the initial activity, not the modified one.
124
+ const sharedContext = new TurnContext(context)
125
+
119
126
  for (const handler of handlers) {
120
- const status = await this.signin(storage, handler, context, active?.data)
127
+ const status = await this.signin(storage, handler, sharedContext, active?.data)
121
128
  logger.debug(this.prefix(handler.id, `Sign-in status: ${status}`))
122
129
 
123
130
  if (status === AuthorizationHandlerStatus.IGNORED) {
@@ -126,17 +133,17 @@ export class AuthorizationManager {
126
133
  }
127
134
 
128
135
  if (status === AuthorizationHandlerStatus.PENDING) {
129
- return { authorized: false }
136
+ return { authorized: false, context: sharedContext }
130
137
  }
131
138
 
132
139
  if (status === AuthorizationHandlerStatus.REJECTED) {
133
140
  await storage.delete()
134
- return { authorized: false }
141
+ return { authorized: false, context: sharedContext }
135
142
  }
136
143
 
137
144
  if (status === AuthorizationHandlerStatus.REVALIDATE) {
138
145
  await storage.delete()
139
- return this.process(context, getHandlerIds)
146
+ return this.process(sharedContext, getHandlerIds)
140
147
  }
141
148
 
142
149
  if (status !== AuthorizationHandlerStatus.APPROVED) {
@@ -146,14 +153,12 @@ export class AuthorizationManager {
146
153
  await storage.delete()
147
154
 
148
155
  if (active) {
149
- // Restore the original activity in the turn context for the next handler to process.
150
- // This is done like this to avoid losing data that may be set in the turn context.
151
- (context as any)._activity = Activity.fromObject(active.data.activity)
156
+ (sharedContext as any)._activity = Activity.fromObject(active.data.activity)
152
157
  active = undefined
153
158
  }
154
159
  }
155
160
 
156
- return { authorized: true }
161
+ return { authorized: true, context: sharedContext }
157
162
  }
158
163
 
159
164
  /**
@@ -26,7 +26,7 @@ enum Category {
26
26
  /**
27
27
  * Active handler manager information.
28
28
  */
29
- export interface AzureBotActiveHandler extends ActiveAuthorizationHandler {
29
+ interface AzureBotActiveHandler extends ActiveAuthorizationHandler {
30
30
  /**
31
31
  * The number of attempts left for the handler to process in case of failure.
32
32
  */
@@ -307,7 +307,8 @@ export class AzureBotAuthorization implements AuthorizationHandler {
307
307
  if (status !== AuthorizationHandlerStatus.IGNORED) {
308
308
  return status
309
309
  }
310
- } else if (active.category === Category.SIGNIN) {
310
+ } else if (active.category === Category.SIGNIN && activity.channelId === Channels.Msteams) {
311
+ // Specific to MS Teams, M365 does not send signin/verifyState when user consent is required.
311
312
  // This is only for safety in case of unexpected behaviors during the MS Teams sign-in process,
312
313
  // e.g., user interrupts the flow by clicking the Consent Cancel button.
313
314
  logger.warn(this.prefix('The incoming activity will be revalidated due to a change in the sign-in flow'), activity)
@@ -550,8 +551,7 @@ export class AzureBotAuthorization implements AuthorizationHandler {
550
551
  * Sends an InvokeResponse activity if the channel is Microsoft Teams, including Copilot within MS Teams.
551
552
  */
552
553
  private sendInvokeResponse <T>(context: TurnContext, response: InvokeResponse<T>) {
553
- const [parentChannel] = Activity.parseChannelId(context.activity.channelId!)
554
- if (parentChannel !== Channels.Msteams) {
554
+ if (context.activity.channelIdChannel !== Channels.Msteams) {
555
555
  return Promise.resolve()
556
556
  }
557
557
 
@@ -164,7 +164,7 @@ export class StreamingResponse {
164
164
  *
165
165
  */
166
166
  public queueTextChunk (text: string, citations?: Citation[]): void {
167
- if (!text.trim() || this._canceled) {
167
+ if (text === null || text === undefined || this._canceled) {
168
168
  return
169
169
  }
170
170
 
@@ -513,7 +513,7 @@ export class StreamingResponse {
513
513
 
514
514
  if (activity.deliveryMode === DeliveryModes.ExpectReplies) {
515
515
  this._isStreamingChannel = false
516
- } else if (Channels.Msteams === activity.channelId) {
516
+ } else if (Channels.Msteams === activity.channelIdChannel) {
517
517
  if (activity.isAgenticRequest()) {
518
518
  // Agentic requests do not support streaming responses at this time.
519
519
  // TODO: Enable streaming for agentic requests when supported.
@@ -522,7 +522,7 @@ export class StreamingResponse {
522
522
  this._isStreamingChannel = true
523
523
  this._delayInMs = 1000
524
524
  }
525
- } else if (Channels.Webchat === activity.channelId || Channels.Directline === activity.channelId) {
525
+ } else if (Channels.Webchat === activity.channelId || Channels.Directline === activity.channelId || Channels.Emulator === activity.channelId) {
526
526
  this._isStreamingChannel = true
527
527
  this._delayInMs = 500
528
528
  } else {
@@ -356,10 +356,32 @@ function buildLegacyAuthConfig (envPrefix: string = '', customConfig?: AuthConfi
356
356
  }
357
357
  }
358
358
 
359
+ /**
360
+ * Resolves the full authority URL including the tenant ID.
361
+ * Supports both patterns:
362
+ * - Tenant embedded in authority: https://login.microsoftonline.com/my-tenant
363
+ * - Authority + separate tenantId: https://login.microsoftonline.com + tenantId
364
+ * Also handles trailing slashes on authority.
365
+ */
366
+ export function resolveAuthority (authority?: string, tenantId?: string): string {
367
+ const base = (authority ?? 'https://login.microsoftonline.com').replace(/\/+$/, '')
368
+ const url = new URL(base)
369
+ const hasPathSegment = url.pathname !== '/'
370
+ if (hasPathSegment) {
371
+ return base
372
+ }
373
+ return `${base}/${tenantId ?? 'botframework.com'}`
374
+ }
375
+
359
376
  function getDefaultIssuers (tenantId: string, authority: string) : string[] {
377
+ // Convert empty string to undefined so resolveAuthority applies its 'botframework.com' default
378
+ const t = tenantId || undefined
379
+ if (!t) {
380
+ logger.warn('tenantId is not configured, defaulting to botframework.com')
381
+ }
360
382
  return [
361
383
  'https://api.botframework.com',
362
- `https://sts.windows.net/${tenantId}/`,
363
- `${authority}/${tenantId}/v2.0`
384
+ `${resolveAuthority('https://sts.windows.net', t)}/`,
385
+ `${resolveAuthority(authority, t)}/v2.0`
364
386
  ]
365
387
  }
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { AuthConfiguration } from './authConfiguration'
6
+ import { AuthConfiguration, resolveAuthority } from './authConfiguration'
7
7
  import { Response, NextFunction } from 'express'
8
8
  import { Request } from './request'
9
9
  import jwksRsa, { JwksClient, SigningKey } from 'jwks-rsa'
@@ -12,6 +12,18 @@ import { debug } from '@microsoft/agents-activity/logger'
12
12
 
13
13
  const logger = debug('agents:jwt-middleware')
14
14
 
15
+ /**
16
+ * Builds the JWKS URI for the given token issuer and auth configuration.
17
+ * @param iss The token issuer claim.
18
+ * @param authConfig The authentication configuration for the matched audience.
19
+ * @returns The JWKS URI string.
20
+ */
21
+ export function buildJwksUri (iss: string, authConfig: AuthConfiguration): string {
22
+ return iss === 'https://api.botframework.com'
23
+ ? 'https://login.botframework.com/v1/.well-known/keys'
24
+ : `${resolveAuthority(authConfig.authority, authConfig.tenantId)}/discovery/v2.0/keys`
25
+ }
26
+
15
27
  /**
16
28
  * Verifies the JWT token.
17
29
  * @param raw The raw JWT token.
@@ -40,9 +52,7 @@ const verifyToken = async (raw: string, config: AuthConfiguration): Promise<JwtP
40
52
  const [key, authConfig] = matchingEntry
41
53
  logger.debug(`Audience found at key: ${key}`)
42
54
 
43
- const jwksUri = payload.iss === 'https://api.botframework.com'
44
- ? 'https://login.botframework.com/v1/.well-known/keys'
45
- : `${authConfig.authority}/${authConfig.tenantId}/discovery/v2.0/keys`
55
+ const jwksUri = buildJwksUri(payload.iss as string, authConfig)
46
56
 
47
57
  logger.debug(`fetching keys from ${jwksUri}`)
48
58
  const jwksClient: JwksClient = jwksRsa({ jwksUri })
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { Activity, RoleTypes } from '@microsoft/agents-activity'
7
- import { AuthConfiguration } from './authConfiguration'
7
+ import { AuthConfiguration, resolveAuthority } from './authConfiguration'
8
8
  import { Connections } from './connections'
9
9
  import { MsalTokenProvider } from './msalTokenProvider'
10
10
  import { JwtPayload } from 'jsonwebtoken'
@@ -166,8 +166,8 @@ export class MsalConnectionManager implements Connections {
166
166
  conn.connectionSettings.authority ??= 'https://login.microsoftonline.com'
167
167
  conn.connectionSettings.issuers ??= [
168
168
  'https://api.botframework.com',
169
- `https://sts.windows.net/${conn.connectionSettings.tenantId}/`,
170
- `${conn.connectionSettings.authority}/${conn.connectionSettings.tenantId}/v2.0`
169
+ `${resolveAuthority('https://sts.windows.net', conn.connectionSettings.tenantId)}/`,
170
+ `${resolveAuthority(conn.connectionSettings.authority, conn.connectionSettings.tenantId)}/v2.0`
171
171
  ]
172
172
  }
173
173
  return conn
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { ConfidentialClientApplication, LogLevel, ManagedIdentityApplication, NodeSystemOptions } from '@azure/msal-node'
7
7
  import axios from 'axios'
8
- import { AuthConfiguration } from './authConfiguration'
8
+ import { AuthConfiguration, resolveAuthority as resolveAuthorityUtil } from './authConfiguration'
9
9
  import { AuthProvider } from './authProvider'
10
10
  import { debug } from '@microsoft/agents-activity/logger'
11
11
  import { v4 } from 'uuid'
@@ -167,36 +167,26 @@ export class MsalTokenProvider implements AuthProvider {
167
167
  * @returns
168
168
  */
169
169
  private resolveAuthority (tenantId?: string) : string {
170
- // if for some reason the agentic tenant ID is not in the message, fall back to the original configured auth settings
171
- if (!tenantId) {
172
- return this.connectionSettings?.authority ? `${this.connectionSettings.authority}/${this.connectionSettings?.tenantId}` : `https://login.microsoftonline.com/${this.connectionSettings?.tenantId || 'botframework.com'}`
173
- }
174
-
175
- const configuredAuth = this.connectionSettings?.authority
176
- const configuredTenantId = this.connectionSettings?.tenantId
170
+ const { authority: configuredAuth, tenantId: configuredTenantId } = this.connectionSettings ?? {}
177
171
 
178
- // Prefer the passed tenantId if present, falling back to the configured tenantId
179
- const finalTenant = tenantId || configuredTenantId
180
-
181
- // Use default Microsoft login endpoint when no custom authority is configured
182
- if (!configuredAuth) {
183
- return `https://login.microsoftonline.com/${finalTenant}`
172
+ if (!tenantId) {
173
+ // No agentic tenant override — delegate to shared utility
174
+ return resolveAuthorityUtil(configuredAuth, configuredTenantId)
184
175
  }
185
176
 
186
- // Check if authority already contains a tenant identifier
187
- const endsWithCommon = configuredAuth.endsWith('/common')
177
+ // Agentic override: build a clean base using the override tenant, then replace any
178
+ // /common or GUID placeholder left in the authority (e.g. from a multi-tenant config)
179
+ const base = resolveAuthorityUtil(configuredAuth, tenantId)
188
180
  const guidPattern = /\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/
189
- const hasTenantGuid = guidPattern.test(configuredAuth)
190
181
 
191
- if (endsWithCommon || hasTenantGuid) {
192
- return configuredAuth.replace(
182
+ if (base.endsWith('/common') || guidPattern.test(base)) {
183
+ return base.replace(
193
184
  /\/(?:common|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})(?=\/|$)/,
194
185
  `/${tenantId}`
195
186
  )
196
187
  }
197
188
 
198
- // Authority has no tenant segment - append the final selected tenant
199
- return `${configuredAuth}/${finalTenant}`
189
+ return base
200
190
  }
201
191
 
202
192
  /**