omnipay-savings-sdk
Version:
Omnipay Savings SDK
337 lines (309 loc) • 7.48 kB
text/typescript
import {GET, getGlobalEnv, POST, PUT} from './';
import {
CreateSavingsParams,
UpdateSavingsParams,
FundSavingsParams,
} from './types';
import {InterestBreakdownType} from '../utils/types';
import {API_DEV_BASE_URL, API_PROD_BASE_URL} from '../env.json';
export const getAllSavingsCategories = async (apiKey: string) => {
try {
const response = await GET({
requestUrl: 'SavingsCategory/GetAllSavingsCategories',
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const getAllPlans = async (apiKey: string) => {
try {
const response = await GET({
requestUrl: 'Plans/GetAllPlans',
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const createPlan = async (apiKey: string, planName: string) => {
try {
const response = await POST({
requestUrl: 'Plans/AddPlans',
apiKey,
requestData: {name: planName},
});
return response;
} catch (error: any) {
return error;
}
};
export const createSavingsAccount = async (
apiKey: string,
params: CreateSavingsParams,
) => {
try {
const response = await POST({
requestUrl: 'Savings/CreateSavingsAccount',
apiKey,
requestData: params,
});
return response;
} catch (error: any) {
return error;
}
};
export const updateSavingsAccount = async (
apiKey: string,
params: UpdateSavingsParams,
) => {
try {
const response = await PUT({
requestUrl: 'Savings/UpdateSavingsAccount',
apiKey,
requestData: params,
});
return response;
} catch (error: any) {
return error;
}
};
export const getSavingsListByCustomerId = async (apiKey: string) => {
try {
const response = await GET({
requestUrl: 'Savings/GetSavingsListByCustomerId',
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const getSavingsDetailsBySavingsId = async (
apiKey: string,
savingsId: string,
) => {
try {
const response = await GET({
requestUrl: `Savings/GetSavingsDetailsBySavingsId/${savingsId}`,
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const getTotalAccountTransactionsByCustomerId = async (
apiKey: string,
) => {
try {
const response = await GET({
requestUrl: 'SavingsTransaction/GetTotalAccountTransactionsByCustomerId',
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const getSavingsTransactionsList = async (
apiKey: string,
params: {
savingsId: string;
recordsPerPage?: number;
transactionType?: string;
startDate?: string;
endDate?: string;
search?: string;
narration?: string;
status?: string;
nextPageToken?: string;
},
) => {
try {
const queryParams = new URLSearchParams();
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined && value !== null) {
queryParams.append(key, value.toString());
}
});
const response = await GET({
requestUrl: `SavingsTransaction/TransactionsList?${queryParams.toString()}`,
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const getSavingsTransactionHistory = async (
apiKey: string,
params: {
recordsPerPage?: number;
transactionType?: string;
startDate?: string;
endDate?: string;
nextPageToken?: string;
},
) => {
try {
const queryParams = new URLSearchParams();
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined && value !== null) {
queryParams.append(key, value.toString());
}
});
const response = await GET({
requestUrl: `SavingsTransaction/History?${queryParams.toString()}`,
apiKey,
});
return response;
} catch (error: any) {
return {
error: true,
message: 'An error occurred while getting interest breakdown',
data: null,
};
}
};
export const getWalletBalance = async (apiKey: string) => {
try {
const requestHeaders = {
authorization: `Bearer ${apiKey}`,
'content-type': 'application/json',
};
const env = getGlobalEnv();
const API_BASE_URL = env === 'prod' ? API_PROD_BASE_URL : API_DEV_BASE_URL;
const response = await fetch(`${API_BASE_URL}wallet/balance`, {
method: 'GET',
headers: requestHeaders,
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const responseData = await response.json();
if (responseData.error === true) {
return {
error:
responseData.message ??
'An error occurred while fetching wallet balance',
};
}
return responseData;
} catch (error: any) {
return {
error: error.message ?? 'Failed to fetch wallet balance',
};
}
};
export const fundSavingsAccount = async (
apiKey: string,
params: FundSavingsParams,
) => {
try {
const response = await POST({
requestUrl: 'SavingsTransaction/FundSavingsAccountManually',
requestData: params,
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const withdrawFromSavingsAccount = async (
apiKey: string,
params: {savingsId: string; amount: number},
) => {
try {
const response = await POST({
requestUrl: 'SavingsTransaction/WithdrawFromSavingsAccount',
requestData: params,
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const getInterestBreakdownBySavingsId = async (
savingsId: string,
apiKey: string,
) => {
try {
const response = await GET({
requestUrl: `SavingsTransaction/GetInterestBreakdownBySavingsId/${savingsId}`,
apiKey,
});
return {
error: false,
message: 'Interest breakdown retrieved successfully',
data: response as InterestBreakdownType[],
};
} catch (error) {
console.error('Error getting interest breakdown:', error);
return {
error: true,
message: 'An error occurred while getting interest breakdown',
data: null,
};
}
};
export const getLockedSavingsInterestRateTiers = async (apiKey: string) => {
try {
const response = await GET({
requestUrl: 'SavingsCategory/GetLockedSavingsInterestRateTiers',
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const getSavingsInterestForecast = async (
apiKey: string,
params: {savingsCategoryId: number; amount: number; endDate: string},
) => {
try {
const response = await POST({
requestUrl: 'Savings/InterestForecast',
requestData: params,
apiKey,
});
return response;
} catch (error: any) {
return error;
}
};
export const enableAutoSave = async (
apiKey: string,
params: {savingsId: string},
) => {
try {
const response = await POST({
requestUrl: 'savings/enableAutoSave',
apiKey,
requestData: params,
});
return response;
} catch (error: any) {
return error;
}
};
export const disableAutoSave = async (
apiKey: string,
params: {savingsId: string},
) => {
try {
const response = await POST({
requestUrl: 'savings/disableAutoSave',
apiKey,
requestData: params,
});
return response;
} catch (error: any) {
return error;
}
};