@microsoft/teams-js 2.34.0-beta.1 → 2.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/esm/_virtual/_polyfill-node.buffer.js +1 -0
- package/dist/esm/_virtual/_polyfill-node.global.js +1 -0
- package/dist/esm/packages/teams-js/dts/internal/constants.d.ts +8 -0
- package/dist/esm/packages/teams-js/dts/internal/internalAPIs.d.ts +1 -1
- package/dist/esm/packages/teams-js/dts/internal/messageObjects.d.ts +1 -0
- package/dist/esm/packages/teams-js/dts/internal/validOrigins.d.ts +1 -1
- package/dist/esm/packages/teams-js/dts/public/app/app.d.ts +9 -0
- package/dist/esm/packages/teams-js/dts/public/constants.d.ts +2 -0
- package/dist/esm/packages/teams-js/dts/public/interfaces.d.ts +14 -0
- package/dist/esm/packages/teams-js/src/internal/communication.js +1 -1
- package/dist/esm/packages/teams-js/src/internal/constants.js +1 -1
- package/dist/esm/packages/teams-js/src/internal/internalAPIs.js +1 -1
- package/dist/esm/packages/teams-js/src/internal/utils.js +1 -1
- package/dist/esm/packages/teams-js/src/internal/validOrigins.js +1 -1
- package/dist/esm/packages/teams-js/src/public/app/app.js +1 -1
- package/dist/esm/packages/teams-js/src/public/constants.js +1 -1
- package/dist/esm/packages/teams-js/src/public/nestedAppAuth.js +1 -1
- package/dist/esm/packages/teams-js/src/public/runtime.js +1 -1
- package/dist/esm/packages/teams-js/src/public/version.js +1 -1
- package/dist/esm/packages/teams-js/src/public/webStorage.js +1 -1
- package/dist/umd/MicrosoftTeams.js +194 -155
- package/dist/umd/MicrosoftTeams.js.map +1 -1
- package/dist/umd/MicrosoftTeams.min.js +1 -1
- package/dist/umd/MicrosoftTeams.min.js.map +1 -1
- package/package.json +53 -1
- package/dist/esm/node_modules/.pnpm/rollup-plugin-node-polyfills@0.2.1/node_modules/rollup-plugin-node-polyfills/polyfills/buffer-es6.js +0 -1
|
@@ -3156,6 +3156,8 @@ var HostClientType;
|
|
|
3156
3156
|
HostClientType["ipados"] = "ipados";
|
|
3157
3157
|
/** The host is running on a macOS client, which runs on devices such as MacBooks. */
|
|
3158
3158
|
HostClientType["macos"] = "macos";
|
|
3159
|
+
/** The host is running on a visionOS client, which runs on devices such as Apple Vision. */
|
|
3160
|
+
HostClientType["visionOS"] = "visionOS";
|
|
3159
3161
|
/**
|
|
3160
3162
|
* @deprecated
|
|
3161
3163
|
* As of TeamsJS v2.0.0, please use {@link teamsRoomsWindows} instead.
|
|
@@ -4013,6 +4015,14 @@ const validOriginsLocal = artifactsForCDN_validDomains_namespaceObject;
|
|
|
4013
4015
|
* Limited to Microsoft-internal use
|
|
4014
4016
|
*/
|
|
4015
4017
|
const validOriginsFallback = validOriginsLocal.validOrigins;
|
|
4018
|
+
/**
|
|
4019
|
+
* @hidden
|
|
4020
|
+
* Timeout length for Fetch Call for Valid Origins
|
|
4021
|
+
*
|
|
4022
|
+
* @internal
|
|
4023
|
+
* Limited to Microsoft-internal use
|
|
4024
|
+
*/
|
|
4025
|
+
const ORIGIN_LIST_FETCH_TIMEOUT_IN_MS = 1500;
|
|
4016
4026
|
/**
|
|
4017
4027
|
* @hidden
|
|
4018
4028
|
* CDN endpoint of the list of valid origins
|
|
@@ -4188,7 +4198,12 @@ const v1NonMobileHostClientTypes = [
|
|
|
4188
4198
|
HostClientType.teamsPhones,
|
|
4189
4199
|
HostClientType.teamsDisplays,
|
|
4190
4200
|
];
|
|
4191
|
-
const v1MobileHostClientTypes = [
|
|
4201
|
+
const v1MobileHostClientTypes = [
|
|
4202
|
+
HostClientType.android,
|
|
4203
|
+
HostClientType.ios,
|
|
4204
|
+
HostClientType.ipados,
|
|
4205
|
+
HostClientType.visionOS,
|
|
4206
|
+
];
|
|
4192
4207
|
const v1HostClientTypes = [...v1NonMobileHostClientTypes, ...v1MobileHostClientTypes];
|
|
4193
4208
|
/**
|
|
4194
4209
|
* @hidden
|
|
@@ -4338,7 +4353,7 @@ const mapTeamsVersionToSupportedCapabilities = {
|
|
|
4338
4353
|
'2.1.1': [
|
|
4339
4354
|
{
|
|
4340
4355
|
capability: { nestedAppAuth: {} },
|
|
4341
|
-
hostClientTypes: [HostClientType.android, HostClientType.ios, HostClientType.ipados],
|
|
4356
|
+
hostClientTypes: [HostClientType.android, HostClientType.ios, HostClientType.ipados, HostClientType.visionOS],
|
|
4342
4357
|
},
|
|
4343
4358
|
],
|
|
4344
4359
|
};
|
|
@@ -4470,7 +4485,7 @@ function isSerializable(arg) {
|
|
|
4470
4485
|
* @hidden
|
|
4471
4486
|
* Package version.
|
|
4472
4487
|
*/
|
|
4473
|
-
const version = "2.34.0
|
|
4488
|
+
const version = "2.34.0";
|
|
4474
4489
|
|
|
4475
4490
|
;// ./src/internal/internalAPIs.ts
|
|
4476
4491
|
|
|
@@ -4549,7 +4564,7 @@ function isCurrentSDKVersionAtLeast(requiredVersion = defaultSDKVersionForCompat
|
|
|
4549
4564
|
}
|
|
4550
4565
|
/**
|
|
4551
4566
|
* @hidden
|
|
4552
|
-
* Helper function to identify if host client is either android, ios, or
|
|
4567
|
+
* Helper function to identify if host client is either android, ios, ipados, or visionOS
|
|
4553
4568
|
*
|
|
4554
4569
|
* @internal
|
|
4555
4570
|
* Limited to Microsoft-internal use
|
|
@@ -4557,7 +4572,8 @@ function isCurrentSDKVersionAtLeast(requiredVersion = defaultSDKVersionForCompat
|
|
|
4557
4572
|
function isHostClientMobile() {
|
|
4558
4573
|
return (GlobalVars.hostClientType == HostClientType.android ||
|
|
4559
4574
|
GlobalVars.hostClientType == HostClientType.ios ||
|
|
4560
|
-
GlobalVars.hostClientType == HostClientType.ipados
|
|
4575
|
+
GlobalVars.hostClientType == HostClientType.ipados ||
|
|
4576
|
+
GlobalVars.hostClientType == HostClientType.visionOS);
|
|
4561
4577
|
}
|
|
4562
4578
|
/**
|
|
4563
4579
|
* @hidden
|
|
@@ -4697,139 +4713,8 @@ function isNullOrUndefined(value) {
|
|
|
4697
4713
|
return value === null || value === undefined;
|
|
4698
4714
|
}
|
|
4699
4715
|
|
|
4700
|
-
;// ./src/internal/validOrigins.ts
|
|
4701
|
-
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4702
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4703
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4704
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
4705
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
4706
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
4707
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
4708
|
-
});
|
|
4709
|
-
};
|
|
4710
|
-
|
|
4711
|
-
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
let validOriginsCache = [];
|
|
4715
|
-
const validateOriginLogger = getLogger('validateOrigin');
|
|
4716
|
-
function prefetchOriginsFromCDN() {
|
|
4717
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
4718
|
-
yield getValidOriginsListFromCDN();
|
|
4719
|
-
});
|
|
4720
|
-
}
|
|
4721
|
-
function isValidOriginsCacheEmpty() {
|
|
4722
|
-
return validOriginsCache.length === 0;
|
|
4723
|
-
}
|
|
4724
|
-
function getValidOriginsListFromCDN() {
|
|
4725
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
4726
|
-
if (!isValidOriginsCacheEmpty()) {
|
|
4727
|
-
return validOriginsCache;
|
|
4728
|
-
}
|
|
4729
|
-
if (!inServerSideRenderingEnvironment()) {
|
|
4730
|
-
return fetch(validOriginsCdnEndpoint)
|
|
4731
|
-
.then((response) => {
|
|
4732
|
-
if (!response.ok) {
|
|
4733
|
-
throw new Error('Invalid Response from Fetch Call');
|
|
4734
|
-
}
|
|
4735
|
-
return response.json().then((validOriginsCDN) => {
|
|
4736
|
-
if (isValidOriginsJSONValid(JSON.stringify(validOriginsCDN))) {
|
|
4737
|
-
validOriginsCache = validOriginsCDN.validOrigins;
|
|
4738
|
-
return validOriginsCache;
|
|
4739
|
-
}
|
|
4740
|
-
else {
|
|
4741
|
-
throw new Error('Valid Origins List Is Invalid');
|
|
4742
|
-
}
|
|
4743
|
-
});
|
|
4744
|
-
})
|
|
4745
|
-
.catch((e) => {
|
|
4746
|
-
validateOriginLogger('validOrigins fetch call to CDN failed with error: %s. Defaulting to fallback list', e);
|
|
4747
|
-
validOriginsCache = validOriginsFallback;
|
|
4748
|
-
return validOriginsCache;
|
|
4749
|
-
});
|
|
4750
|
-
}
|
|
4751
|
-
else {
|
|
4752
|
-
validOriginsCache = validOriginsFallback;
|
|
4753
|
-
return validOriginsFallback;
|
|
4754
|
-
}
|
|
4755
|
-
});
|
|
4756
|
-
}
|
|
4757
|
-
function isValidOriginsJSONValid(validOriginsJSON) {
|
|
4758
|
-
let validOriginsCDN = JSON.parse(validOriginsJSON);
|
|
4759
|
-
try {
|
|
4760
|
-
validOriginsCDN = JSON.parse(validOriginsJSON);
|
|
4761
|
-
}
|
|
4762
|
-
catch (_) {
|
|
4763
|
-
return false;
|
|
4764
|
-
}
|
|
4765
|
-
if (!validOriginsCDN.validOrigins) {
|
|
4766
|
-
return false;
|
|
4767
|
-
}
|
|
4768
|
-
for (const validOrigin of validOriginsCDN.validOrigins) {
|
|
4769
|
-
try {
|
|
4770
|
-
new URL('https://' + validOrigin);
|
|
4771
|
-
}
|
|
4772
|
-
catch (_) {
|
|
4773
|
-
validateOriginLogger('isValidOriginsFromCDN call failed to validate origin: %s', validOrigin);
|
|
4774
|
-
return false;
|
|
4775
|
-
}
|
|
4776
|
-
}
|
|
4777
|
-
return true;
|
|
4778
|
-
}
|
|
4779
|
-
/**
|
|
4780
|
-
* @param pattern - reference pattern
|
|
4781
|
-
* @param host - candidate string
|
|
4782
|
-
* @returns returns true if host matches pre-know valid pattern
|
|
4783
|
-
*
|
|
4784
|
-
* @example
|
|
4785
|
-
* validateHostAgainstPattern('*.teams.microsoft.com', 'subdomain.teams.microsoft.com') returns true
|
|
4786
|
-
* validateHostAgainstPattern('teams.microsoft.com', 'team.microsoft.com') returns false
|
|
4787
|
-
*
|
|
4788
|
-
* @internal
|
|
4789
|
-
* Limited to Microsoft-internal use
|
|
4790
|
-
*/
|
|
4791
|
-
function validateHostAgainstPattern(pattern, host) {
|
|
4792
|
-
if (pattern.substring(0, 2) === '*.') {
|
|
4793
|
-
const suffix = pattern.substring(1);
|
|
4794
|
-
if (host.length > suffix.length &&
|
|
4795
|
-
host.split('.').length === suffix.split('.').length &&
|
|
4796
|
-
host.substring(host.length - suffix.length) === suffix) {
|
|
4797
|
-
return true;
|
|
4798
|
-
}
|
|
4799
|
-
}
|
|
4800
|
-
else if (pattern === host) {
|
|
4801
|
-
return true;
|
|
4802
|
-
}
|
|
4803
|
-
return false;
|
|
4804
|
-
}
|
|
4805
|
-
/**
|
|
4806
|
-
* @internal
|
|
4807
|
-
* Limited to Microsoft-internal use
|
|
4808
|
-
*/
|
|
4809
|
-
function validateOrigin(messageOrigin) {
|
|
4810
|
-
return getValidOriginsListFromCDN().then((validOriginsList) => {
|
|
4811
|
-
// Check whether the url is in the pre-known allowlist or supplied by user
|
|
4812
|
-
if (!isValidHttpsURL(messageOrigin)) {
|
|
4813
|
-
validateOriginLogger('Origin %s is invalid because it is not using https protocol. Protocol being used: %s', messageOrigin, messageOrigin.protocol);
|
|
4814
|
-
return false;
|
|
4815
|
-
}
|
|
4816
|
-
const messageOriginHost = messageOrigin.host;
|
|
4817
|
-
if (validOriginsList.some((pattern) => validateHostAgainstPattern(pattern, messageOriginHost))) {
|
|
4818
|
-
return true;
|
|
4819
|
-
}
|
|
4820
|
-
for (const domainOrPattern of GlobalVars.additionalValidOrigins) {
|
|
4821
|
-
const pattern = domainOrPattern.substring(0, 8) === 'https://' ? domainOrPattern.substring(8) : domainOrPattern;
|
|
4822
|
-
if (validateHostAgainstPattern(pattern, messageOriginHost)) {
|
|
4823
|
-
return true;
|
|
4824
|
-
}
|
|
4825
|
-
}
|
|
4826
|
-
validateOriginLogger('Origin %s is invalid because it is not an origin approved by this library or included in the call to app.initialize.\nOrigins approved by this library: %o\nOrigins included in app.initialize: %o', messageOrigin, validOriginsList, GlobalVars.additionalValidOrigins);
|
|
4827
|
-
return false;
|
|
4828
|
-
});
|
|
4829
|
-
}
|
|
4830
|
-
|
|
4831
4716
|
;// ./src/private/messageChannels/telemetry.ts
|
|
4832
|
-
var
|
|
4717
|
+
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4833
4718
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4834
4719
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4835
4720
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
@@ -4861,7 +4746,7 @@ const logger = getLogger('messageChannels.telemetry');
|
|
|
4861
4746
|
* Limited to Microsoft-internal use
|
|
4862
4747
|
*/
|
|
4863
4748
|
function getTelemetryPort() {
|
|
4864
|
-
return
|
|
4749
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
4865
4750
|
// If the port has already been initialized, return it.
|
|
4866
4751
|
if (telemetryPort) {
|
|
4867
4752
|
logger('Returning telemetry port from cache');
|
|
@@ -5155,7 +5040,6 @@ logWhereTeamsJsIsBeingUsed();
|
|
|
5155
5040
|
* @returns Promise that will be fulfilled when initialization has completed, or rejected if the initialization fails or times out
|
|
5156
5041
|
*/
|
|
5157
5042
|
function initialize(validMessageOrigins) {
|
|
5158
|
-
prefetchOriginsFromCDN();
|
|
5159
5043
|
return appInitializeHelper(getApiVersionTag(appTelemetryVersionNumber, "app.initialize" /* ApiName.App_Initialize */), validMessageOrigins);
|
|
5160
5044
|
}
|
|
5161
5045
|
/**
|
|
@@ -5319,6 +5203,8 @@ function transformLegacyContextToAppContext(legacyContext) {
|
|
|
5319
5203
|
ringId: legacyContext.ringId,
|
|
5320
5204
|
},
|
|
5321
5205
|
appLaunchId: legacyContext.appLaunchId,
|
|
5206
|
+
appId: legacyContext.appId ? new AppId(legacyContext.appId) : undefined,
|
|
5207
|
+
manifestVersion: legacyContext.manifestVersion,
|
|
5322
5208
|
},
|
|
5323
5209
|
page: {
|
|
5324
5210
|
id: legacyContext.entityId,
|
|
@@ -6818,6 +6704,148 @@ function openLinkHelper(apiVersionTag, deepLink) {
|
|
|
6818
6704
|
});
|
|
6819
6705
|
}
|
|
6820
6706
|
|
|
6707
|
+
;// ./src/internal/validOrigins.ts
|
|
6708
|
+
var validOrigins_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6709
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6710
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6711
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6712
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6713
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
6714
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
6715
|
+
});
|
|
6716
|
+
};
|
|
6717
|
+
|
|
6718
|
+
|
|
6719
|
+
|
|
6720
|
+
|
|
6721
|
+
let validOriginsCache = [];
|
|
6722
|
+
const validateOriginLogger = getLogger('validateOrigin');
|
|
6723
|
+
function prefetchOriginsFromCDN() {
|
|
6724
|
+
return validOrigins_awaiter(this, void 0, void 0, function* () {
|
|
6725
|
+
yield getValidOriginsListFromCDN();
|
|
6726
|
+
});
|
|
6727
|
+
}
|
|
6728
|
+
function isValidOriginsCacheEmpty() {
|
|
6729
|
+
return validOriginsCache.length === 0;
|
|
6730
|
+
}
|
|
6731
|
+
function getValidOriginsListFromCDN(shouldDisableCache = false) {
|
|
6732
|
+
return validOrigins_awaiter(this, void 0, void 0, function* () {
|
|
6733
|
+
if (!isValidOriginsCacheEmpty() && !shouldDisableCache) {
|
|
6734
|
+
return validOriginsCache;
|
|
6735
|
+
}
|
|
6736
|
+
if (!inServerSideRenderingEnvironment()) {
|
|
6737
|
+
validateOriginLogger('Initiating fetch call to acquire valid origins list from CDN');
|
|
6738
|
+
const controller = new AbortController();
|
|
6739
|
+
const timeoutId = setTimeout(() => controller.abort(), ORIGIN_LIST_FETCH_TIMEOUT_IN_MS);
|
|
6740
|
+
return fetch(validOriginsCdnEndpoint, { signal: controller.signal })
|
|
6741
|
+
.then((response) => {
|
|
6742
|
+
clearTimeout(timeoutId);
|
|
6743
|
+
if (!response.ok) {
|
|
6744
|
+
throw new Error('Invalid Response from Fetch Call');
|
|
6745
|
+
}
|
|
6746
|
+
validateOriginLogger('Fetch call completed and retrieved valid origins list from CDN');
|
|
6747
|
+
return response.json().then((validOriginsCDN) => {
|
|
6748
|
+
if (isValidOriginsJSONValid(JSON.stringify(validOriginsCDN))) {
|
|
6749
|
+
validOriginsCache = validOriginsCDN.validOrigins;
|
|
6750
|
+
return validOriginsCache;
|
|
6751
|
+
}
|
|
6752
|
+
else {
|
|
6753
|
+
throw new Error('Valid origins list retrieved from CDN is invalid');
|
|
6754
|
+
}
|
|
6755
|
+
});
|
|
6756
|
+
})
|
|
6757
|
+
.catch((e) => {
|
|
6758
|
+
if (e.name === 'AbortError') {
|
|
6759
|
+
validateOriginLogger(`validOrigins fetch call to CDN failed due to Timeout of ${ORIGIN_LIST_FETCH_TIMEOUT_IN_MS} ms. Defaulting to fallback list`);
|
|
6760
|
+
}
|
|
6761
|
+
else {
|
|
6762
|
+
validateOriginLogger('validOrigins fetch call to CDN failed with error: %s. Defaulting to fallback list', e);
|
|
6763
|
+
}
|
|
6764
|
+
validOriginsCache = validOriginsFallback;
|
|
6765
|
+
return validOriginsCache;
|
|
6766
|
+
});
|
|
6767
|
+
}
|
|
6768
|
+
else {
|
|
6769
|
+
validOriginsCache = validOriginsFallback;
|
|
6770
|
+
return validOriginsFallback;
|
|
6771
|
+
}
|
|
6772
|
+
});
|
|
6773
|
+
}
|
|
6774
|
+
function isValidOriginsJSONValid(validOriginsJSON) {
|
|
6775
|
+
let validOriginsCDN = JSON.parse(validOriginsJSON);
|
|
6776
|
+
try {
|
|
6777
|
+
validOriginsCDN = JSON.parse(validOriginsJSON);
|
|
6778
|
+
}
|
|
6779
|
+
catch (_) {
|
|
6780
|
+
return false;
|
|
6781
|
+
}
|
|
6782
|
+
if (!validOriginsCDN.validOrigins) {
|
|
6783
|
+
return false;
|
|
6784
|
+
}
|
|
6785
|
+
for (const validOrigin of validOriginsCDN.validOrigins) {
|
|
6786
|
+
try {
|
|
6787
|
+
new URL('https://' + validOrigin);
|
|
6788
|
+
}
|
|
6789
|
+
catch (_) {
|
|
6790
|
+
validateOriginLogger('isValidOriginsFromCDN call failed to validate origin: %s', validOrigin);
|
|
6791
|
+
return false;
|
|
6792
|
+
}
|
|
6793
|
+
}
|
|
6794
|
+
return true;
|
|
6795
|
+
}
|
|
6796
|
+
/**
|
|
6797
|
+
* @param pattern - reference pattern
|
|
6798
|
+
* @param host - candidate string
|
|
6799
|
+
* @returns returns true if host matches pre-know valid pattern
|
|
6800
|
+
*
|
|
6801
|
+
* @example
|
|
6802
|
+
* validateHostAgainstPattern('*.teams.microsoft.com', 'subdomain.teams.microsoft.com') returns true
|
|
6803
|
+
* validateHostAgainstPattern('teams.microsoft.com', 'team.microsoft.com') returns false
|
|
6804
|
+
*
|
|
6805
|
+
* @internal
|
|
6806
|
+
* Limited to Microsoft-internal use
|
|
6807
|
+
*/
|
|
6808
|
+
function validateHostAgainstPattern(pattern, host) {
|
|
6809
|
+
if (pattern.substring(0, 2) === '*.') {
|
|
6810
|
+
const suffix = pattern.substring(1);
|
|
6811
|
+
if (host.length > suffix.length &&
|
|
6812
|
+
host.split('.').length === suffix.split('.').length &&
|
|
6813
|
+
host.substring(host.length - suffix.length) === suffix) {
|
|
6814
|
+
return true;
|
|
6815
|
+
}
|
|
6816
|
+
}
|
|
6817
|
+
else if (pattern === host) {
|
|
6818
|
+
return true;
|
|
6819
|
+
}
|
|
6820
|
+
return false;
|
|
6821
|
+
}
|
|
6822
|
+
/**
|
|
6823
|
+
* @internal
|
|
6824
|
+
* Limited to Microsoft-internal use
|
|
6825
|
+
*/
|
|
6826
|
+
function validateOrigin(messageOrigin, disableCache) {
|
|
6827
|
+
return getValidOriginsListFromCDN(disableCache).then((validOriginsList) => {
|
|
6828
|
+
// Check whether the url is in the pre-known allowlist or supplied by user
|
|
6829
|
+
if (!isValidHttpsURL(messageOrigin)) {
|
|
6830
|
+
validateOriginLogger('Origin %s is invalid because it is not using https protocol. Protocol being used: %s', messageOrigin, messageOrigin.protocol);
|
|
6831
|
+
return false;
|
|
6832
|
+
}
|
|
6833
|
+
const messageOriginHost = messageOrigin.host;
|
|
6834
|
+
if (validOriginsList.some((pattern) => validateHostAgainstPattern(pattern, messageOriginHost))) {
|
|
6835
|
+
return true;
|
|
6836
|
+
}
|
|
6837
|
+
for (const domainOrPattern of GlobalVars.additionalValidOrigins) {
|
|
6838
|
+
const pattern = domainOrPattern.substring(0, 8) === 'https://' ? domainOrPattern.substring(8) : domainOrPattern;
|
|
6839
|
+
if (validateHostAgainstPattern(pattern, messageOriginHost)) {
|
|
6840
|
+
return true;
|
|
6841
|
+
}
|
|
6842
|
+
}
|
|
6843
|
+
validateOriginLogger('Origin %s is invalid because it is not an origin approved by this library or included in the call to app.initialize.\nOrigins approved by this library: %o\nOrigins included in app.initialize: %o', messageOrigin, validOriginsList, GlobalVars.additionalValidOrigins);
|
|
6844
|
+
return false;
|
|
6845
|
+
});
|
|
6846
|
+
}
|
|
6847
|
+
prefetchOriginsFromCDN();
|
|
6848
|
+
|
|
6821
6849
|
;// ./src/public/pages/appButton.ts
|
|
6822
6850
|
/**
|
|
6823
6851
|
* Provides APIs to interact with the app button part of the SDK.
|
|
@@ -8354,10 +8382,10 @@ const sendMessageToParentHelperLogger = communicationLogger.extend('sendMessageT
|
|
|
8354
8382
|
* @internal
|
|
8355
8383
|
* Limited to Microsoft-internal use
|
|
8356
8384
|
*/
|
|
8357
|
-
function sendMessageToParentHelper(apiVersionTag, actionName, args) {
|
|
8385
|
+
function sendMessageToParentHelper(apiVersionTag, actionName, args, isProxiedFromChild) {
|
|
8358
8386
|
const logger = sendMessageToParentHelperLogger;
|
|
8359
8387
|
const targetWindow = Communication.parentWindow;
|
|
8360
|
-
const request = createMessageRequest(apiVersionTag, actionName, args);
|
|
8388
|
+
const request = createMessageRequest(apiVersionTag, actionName, args, isProxiedFromChild);
|
|
8361
8389
|
HostToAppMessageDelayTelemetry.storeCallbackInformation(request.uuid, {
|
|
8362
8390
|
name: actionName,
|
|
8363
8391
|
calledAt: request.timestamp,
|
|
@@ -8684,15 +8712,7 @@ function handleIncomingMessageFromChild(evt) {
|
|
|
8684
8712
|
else {
|
|
8685
8713
|
// No handler, proxy to parent
|
|
8686
8714
|
handleIncomingMessageFromChildLogger('No handler for message %s from child found; relaying message on to parent, action: %s. Relayed message will have a new id.', getMessageIdsAsLogString(message), message.func);
|
|
8687
|
-
|
|
8688
|
-
if (Communication.childWindow) {
|
|
8689
|
-
const isPartialResponse = args.pop();
|
|
8690
|
-
handleIncomingMessageFromChildLogger('Message from parent being relayed to child, id: %s', getMessageIdsAsLogString(message));
|
|
8691
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
8692
|
-
// @ts-ignore
|
|
8693
|
-
sendMessageResponseToChild(message.id, message.uuid, args, isPartialResponse);
|
|
8694
|
-
}
|
|
8695
|
-
});
|
|
8715
|
+
proxyChildMessageToParent(message);
|
|
8696
8716
|
}
|
|
8697
8717
|
}
|
|
8698
8718
|
}
|
|
@@ -8839,7 +8859,7 @@ function sendMessageEventToChild(actionName, args) {
|
|
|
8839
8859
|
* @internal
|
|
8840
8860
|
* Limited to Microsoft-internal use
|
|
8841
8861
|
*/
|
|
8842
|
-
function createMessageRequest(apiVersionTag, func, args) {
|
|
8862
|
+
function createMessageRequest(apiVersionTag, func, args, isProxiedFromChild) {
|
|
8843
8863
|
const messageId = CommunicationPrivate.nextMessageId++;
|
|
8844
8864
|
const messageUuid = new UUID();
|
|
8845
8865
|
CommunicationPrivate.legacyMessageIdsToUuidMap[messageId] = messageUuid;
|
|
@@ -8851,6 +8871,7 @@ function createMessageRequest(apiVersionTag, func, args) {
|
|
|
8851
8871
|
monotonicTimestamp: getCurrentTimestamp(),
|
|
8852
8872
|
args: args || [],
|
|
8853
8873
|
apiVersionTag: apiVersionTag,
|
|
8874
|
+
isProxiedFromChild: isProxiedFromChild !== null && isProxiedFromChild !== void 0 ? isProxiedFromChild : false,
|
|
8854
8875
|
};
|
|
8855
8876
|
}
|
|
8856
8877
|
/**
|
|
@@ -8916,6 +8937,22 @@ function getMessageIdsAsLogString(message) {
|
|
|
8916
8937
|
return `legacy id: ${message.id} (no uuid)`;
|
|
8917
8938
|
}
|
|
8918
8939
|
}
|
|
8940
|
+
/**
|
|
8941
|
+
* @internal
|
|
8942
|
+
* Limited to Microsoft-internal use
|
|
8943
|
+
*/
|
|
8944
|
+
function proxyChildMessageToParent(message) {
|
|
8945
|
+
const request = sendMessageToParentHelper(getApiVersionTag("v2" /* ApiVersionNumber.V_2 */, "tasks.startTask" /* ApiName.Tasks_StartTask */), message.func, message.args, true);
|
|
8946
|
+
CommunicationPrivate.callbacks.set(request.uuid, (...args) => {
|
|
8947
|
+
if (Communication.childWindow) {
|
|
8948
|
+
const isPartialResponse = args.pop();
|
|
8949
|
+
handleIncomingMessageFromChildLogger('Message from parent being relayed to child, id: %s', getMessageIdsAsLogString(message));
|
|
8950
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
8951
|
+
// @ts-ignore
|
|
8952
|
+
sendMessageResponseToChild(message.id, message.uuid, args, isPartialResponse);
|
|
8953
|
+
}
|
|
8954
|
+
});
|
|
8955
|
+
}
|
|
8919
8956
|
|
|
8920
8957
|
;// ./src/private/logs.ts
|
|
8921
8958
|
/**
|
|
@@ -14341,16 +14378,17 @@ function isNAAChannelRecommended() {
|
|
|
14341
14378
|
}
|
|
14342
14379
|
function isNAAChannelRecommendedForLegacyTeamsMobile() {
|
|
14343
14380
|
return ensureInitialized(runtime) &&
|
|
14344
|
-
|
|
14381
|
+
isHostAndroidOrIOSOrIPadOSOrVisionOS() &&
|
|
14345
14382
|
runtime.isLegacyTeams &&
|
|
14346
14383
|
runtime.supports.nestedAppAuth
|
|
14347
14384
|
? true
|
|
14348
14385
|
: false;
|
|
14349
14386
|
}
|
|
14350
|
-
function
|
|
14387
|
+
function isHostAndroidOrIOSOrIPadOSOrVisionOS() {
|
|
14351
14388
|
return (GlobalVars.hostClientType === HostClientType.android ||
|
|
14352
14389
|
GlobalVars.hostClientType === HostClientType.ios ||
|
|
14353
|
-
GlobalVars.hostClientType === HostClientType.ipados
|
|
14390
|
+
GlobalVars.hostClientType === HostClientType.ipados ||
|
|
14391
|
+
GlobalVars.hostClientType === HostClientType.visionOS);
|
|
14354
14392
|
}
|
|
14355
14393
|
|
|
14356
14394
|
;// ./src/public/geoLocation/map.ts
|
|
@@ -16739,7 +16777,8 @@ function isWebStorageClearedOnUserLogOut() {
|
|
|
16739
16777
|
if (runtime.isLegacyTeams &&
|
|
16740
16778
|
(GlobalVars.hostClientType === HostClientType.android ||
|
|
16741
16779
|
GlobalVars.hostClientType === HostClientType.ios ||
|
|
16742
|
-
GlobalVars.hostClientType === HostClientType.ipados
|
|
16780
|
+
GlobalVars.hostClientType === HostClientType.ipados ||
|
|
16781
|
+
GlobalVars.hostClientType === HostClientType.visionOS) &&
|
|
16743
16782
|
(yield getHostName()) === HostName.teams) {
|
|
16744
16783
|
// On Teams Mobile, they haven't yet implemented this capability. However, for compatibility reasons, we need
|
|
16745
16784
|
// to act as if they do. If they did implement it, they would return true, so that's what we do here.
|