@azure/msal-browser
Version:
Microsoft Authentication Library for js
89 lines (77 loc) • 3.02 kB
text/typescript
/*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
import { BaseOperatingContext } from "./BaseOperatingContext.js";
import { IBridgeProxy } from "../naa/IBridgeProxy.js";
import { BridgeProxy } from "../naa/BridgeProxy.js";
import { AccountContext } from "../naa/BridgeAccountContext.js";
declare global {
interface Window {
__initializeNestedAppAuth?(): Promise<void>;
}
}
export class NestedAppOperatingContext extends BaseOperatingContext {
protected bridgeProxy: IBridgeProxy | undefined = undefined;
protected accountContext: AccountContext | null = null;
/*
* TODO: Once we have determine the bundling code return here to specify the name of the bundle
* containing the implementation for this operating context
*/
static readonly MODULE_NAME: string = "";
/**
* Unique identifier for the operating context
*/
static readonly ID: string = "NestedAppOperatingContext";
/**
* Return the module name. Intended for use with import() to enable dynamic import
* of the implementation associated with this operating context
* @returns
*/
getModuleName(): string {
return NestedAppOperatingContext.MODULE_NAME;
}
/**
* Returns the unique identifier for this operating context
* @returns string
*/
getId(): string {
return NestedAppOperatingContext.ID;
}
/**
* Returns the current BridgeProxy
* @returns IBridgeProxy | undefined
*/
getBridgeProxy(): IBridgeProxy | undefined {
return this.bridgeProxy;
}
/**
* Checks whether the operating context is available.
* Confirms that the code is running a browser rather. This is required.
* @returns Promise<boolean> indicating whether this operating context is currently available.
*/
async initialize(): Promise<boolean> {
try {
if (typeof window !== "undefined") {
if (typeof window.__initializeNestedAppAuth === "function") {
await window.__initializeNestedAppAuth();
}
const bridgeProxy: IBridgeProxy = await BridgeProxy.create();
/*
* Because we want single sign on we expect the host app to provide the account context
* with a min set of params that can be used to identify the account
* this.account = nestedApp.getAccountByFilter(bridgeProxy.getAccountContext());
*/
this.accountContext = bridgeProxy.getAccountContext();
this.bridgeProxy = bridgeProxy;
this.available = bridgeProxy !== undefined;
}
} catch (ex) {
this.logger.infoPii(
`Could not initialize Nested App Auth bridge (${ex})`
);
}
this.logger.info(`Nested App Auth Bridge available: ${this.available}`);
return this.available;
}
}