@nevis-security/nevis-mobile-authentication-sdk-react
Version:
React Native plugin for Nevis Mobile Authentication SDK. Supports only mobile.
72 lines (60 loc) • 2.26 kB
text/typescript
/**
* Copyright © 2023-2024 Nevis Security AG. All rights reserved.
*/
import { TypedData } from './TypedData';
import {
AuthorizationProvider,
CookieAuthorizationProvider,
JwsAuthorizationProvider,
JwtAuthorizationProvider,
} from '../../authorization/AuthorizationProvider';
import { CookieContainer } from '../../authorization/CookieContainer';
class AuthorizationProviderData {
cookies?: Array<CookieContainer>;
jwt?: string;
constructor(cookies?: Array<CookieContainer>, jwt?: string) {
this.cookies = cookies;
this.jwt = jwt;
}
}
export abstract class TypedAuthorizationProvider extends TypedData<AuthorizationProviderData> {
abstract data: AuthorizationProviderData;
static create(authorizationProvider: AuthorizationProvider): TypedAuthorizationProvider {
if (authorizationProvider instanceof CookieAuthorizationProvider) {
return new TypedCookieAuthorizationProvider(authorizationProvider);
} else if (authorizationProvider instanceof JwsAuthorizationProvider) {
return new TypedJwsAuthorizationProvider(authorizationProvider);
} else if (authorizationProvider instanceof JwtAuthorizationProvider) {
return new TypedJwtAuthorizationProvider(authorizationProvider);
} else {
throw new Error(
`Unknown authorization provider (${authorizationProvider.constructor.name}).`
);
}
}
}
export class TypedCookieAuthorizationProvider extends TypedAuthorizationProvider {
type = 'CookieAuthorizationProvider';
data: AuthorizationProviderData;
constructor(wrapped: CookieAuthorizationProvider) {
super();
this.data = new AuthorizationProviderData(wrapped.cookies);
}
}
export class TypedJwsAuthorizationProvider extends TypedAuthorizationProvider {
type = 'JwsAuthorizationProvider';
data: AuthorizationProviderData;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
constructor(_wrapped: JwsAuthorizationProvider) {
super();
this.data = new AuthorizationProviderData(undefined, undefined);
}
}
export class TypedJwtAuthorizationProvider extends TypedAuthorizationProvider {
type = 'JwtAuthorizationProvider';
data: AuthorizationProviderData;
constructor(wrapped: JwtAuthorizationProvider) {
super();
this.data = new AuthorizationProviderData(undefined, wrapped.jwt);
}
}