@nevis-security/nevis-mobile-authentication-sdk-react
Version:
React Native plugin for Nevis Mobile Authentication SDK. Supports only mobile.
86 lines (74 loc) • 2.16 kB
text/typescript
/**
* Copyright © 2023 Nevis Security AG. All rights reserved.
*/
import { TypedData } from './TypedData';
import {
ConstantRetryPolicy,
ExponentialRetryPolicy,
NoRetryPolicy,
RetryPolicy,
} from '../../operations/RetryPolicy';
class RetryPolicyData {
maxRetries?: number;
delayInSeconds?: number;
initialDelayInSeconds?: number;
maximumDelayInSeconds?: number;
multiplier?: number;
constructor(
maxRetries?: number,
delayInSeconds?: number,
initialDelayInSeconds?: number,
maximumDelayInSeconds?: number,
multiplier?: number
) {
this.maxRetries = maxRetries;
this.delayInSeconds = delayInSeconds;
this.initialDelayInSeconds = initialDelayInSeconds;
this.maximumDelayInSeconds = maximumDelayInSeconds;
this.multiplier = multiplier;
}
}
export abstract class TypedRetryPolicy extends TypedData<RetryPolicyData> {
abstract data: RetryPolicyData;
static create(retryPolicy: RetryPolicy): TypedRetryPolicy {
if (retryPolicy instanceof NoRetryPolicy) {
return new TypedNoRetryPolicy();
} else if (retryPolicy instanceof ConstantRetryPolicy) {
return new TypedConstantRetryPolicy(retryPolicy);
} else if (retryPolicy instanceof ExponentialRetryPolicy) {
return new TypedExponentialRetryPolicy(retryPolicy);
} else {
throw new Error(`Unknown retry policy (${retryPolicy.constructor.name}).`);
}
}
}
export class TypedNoRetryPolicy extends TypedRetryPolicy {
type = 'NoRetryPolicy';
data: RetryPolicyData;
constructor() {
super();
this.data = new RetryPolicyData();
}
}
export class TypedConstantRetryPolicy extends TypedRetryPolicy {
type = 'ConstantRetryPolicy';
data: RetryPolicyData;
constructor(wrapped: ConstantRetryPolicy) {
super();
this.data = new RetryPolicyData(wrapped.maxRetries, wrapped.delayInSeconds);
}
}
export class TypedExponentialRetryPolicy extends TypedRetryPolicy {
type = 'ExponentialRetryPolicy';
data: RetryPolicyData;
constructor(wrapped: ExponentialRetryPolicy) {
super();
this.data = new RetryPolicyData(
wrapped.maxRetries,
undefined,
wrapped.initialDelayInSeconds,
wrapped.maximumDelayInSeconds,
wrapped.multiplier
);
}
}