@axa-fr/oidc-client-service-worker
Version:
OpenID Connect & OAuth authentication service worker
155 lines (139 loc) • 3.92 kB
text/typescript
export type DomainDetails = {
domains?: Domain[];
oidcDomains?: Domain[];
accessTokenDomains?: Domain[];
showAccessToken: boolean;
convertAllRequestsToCorsExceptNavigate?: boolean;
setAccessTokenToNavigateRequests?: boolean;
demonstratingProofOfPossession?: boolean;
demonstratingProofOfPossessionOnlyWhenDpopHeaderPresent?: boolean;
demonstratingProofOfPossessionConfiguration?: DemonstratingProofOfPossessionConfiguration;
allowMultiTabLogin?: boolean;
};
export interface DemonstratingProofOfPossessionConfiguration {
generateKeyAlgorithm: RsaHashedKeyGenParams | EcKeyGenParams;
digestAlgorithm: AlgorithmIdentifier;
importKeyAlgorithm:
| AlgorithmIdentifier
| RsaHashedImportParams
| EcKeyImportParams
| HmacImportParams
| AesKeyAlgorithm;
signAlgorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams;
jwtHeaderAlgorithm: string;
}
export type Domain = string | RegExp;
export type TrustedDomains = {
[key: string]: Domain[] | DomainDetails;
} | null;
export type OidcServerConfiguration = {
revocationEndpoint: string;
issuer: string;
authorizationEndpoint: string;
tokenEndpoint: string;
userInfoEndpoint: string;
};
export type OidcConfiguration = {
token_renew_mode: string;
demonstrating_proof_of_possession: boolean;
};
// Uncertain why the Headers interface in lib.webworker.d.ts does not have a keys() function, so extending
export interface FetchHeaders extends Headers {
keys(): string[];
}
export type Status =
| 'LOGGED'
| 'LOGGED_IN'
| 'LOGGED_OUT'
| 'NOT_CONNECTED'
| 'LOGOUT_FROM_ANOTHER_TAB'
| 'SESSION_LOST'
| 'REQUIRE_SYNC_TOKENS'
| 'FORCE_REFRESH'
| null;
export type MessageEventType =
| 'clear'
| 'init'
| 'setState'
| 'getState'
| 'setCodeVerifier'
| 'getCodeVerifier'
| 'setSessionState'
| 'getSessionState'
| 'setNonce'
| 'getNonce'
| 'setDemonstratingProofOfPossessionNonce'
| 'getDemonstratingProofOfPossessionNonce'
| 'setDemonstratingProofOfPossessionJwk'
| 'getDemonstratingProofOfPossessionJwk';
export type MessageData = {
status: Status;
oidcServerConfiguration: OidcServerConfiguration;
oidcConfiguration: OidcConfiguration;
where: string;
state: string;
codeVerifier: string;
sessionState: string;
demonstratingProofOfPossessionNonce: string;
demonstratingProofOfPossessionJwkJson: string;
nonce: Nonce;
};
export type MessageEventData = {
configurationName: string;
tabId: string;
type: MessageEventType;
data: MessageData;
};
export type Nonce = {
nonce: string;
} | null;
export type OidcConfig = {
demonstratingProofOfPossessionConfiguration: DemonstratingProofOfPossessionConfiguration | null;
configurationName: string;
tokens: Tokens | null;
status: Status;
state: string | null;
codeVerifier: string | null;
nonce: Nonce;
oidcServerConfiguration: OidcServerConfiguration | null;
oidcConfiguration?: OidcConfiguration;
sessionState?: string | null;
items?: MessageData;
hideAccessToken: boolean;
convertAllRequestsToCorsExceptNavigate: boolean;
setAccessTokenToNavigateRequests: boolean;
demonstratingProofOfPossessionNonce: string | null;
demonstratingProofOfPossessionJwkJson: string | null;
demonstratingProofOfPossessionOnlyWhenDpopHeaderPresent: boolean;
allowMultiTabLogin: boolean;
};
export type IdTokenPayload = {
iss: string;
/**
* (Expiration Time) Claim
*/
exp: number;
/**
* (Issued At) Claim
*/
iat: number;
nonce: string | null;
};
export type AccessTokenPayload = {
exp: number;
sub: string;
iat: number;
};
export type Tokens = {
issued_at: number | string;
access_token: string;
accessTokenPayload: AccessTokenPayload | null;
id_token: null | string;
idTokenPayload: IdTokenPayload;
refresh_token?: string;
expiresAt: number;
expires_in: number | string;
};
export type Database = {
[key: string]: OidcConfig;
};