aps-data-api
Version:
package for data extraction from APS company for omnimetic project
185 lines (128 loc) • 4.11 kB
Markdown
# aps-data-api
`npm` package for APS company for data extraction
- This package contains two methods of data extraction
1. `getServiceAccounts` - It gives the response in the form of list of `service-accounts` related to given `user-account`
2. `getMonthlyUtilityData` - It gives the response in the form of list of `monthly-utility-data` for given `service-account`
# Installation
`npm i aps-data-api --save`
## How to use?
```
import { APSUtilityDataService } from 'aps-data-api';
const apsUtilityDataService = new APSUtilityDataService();
const payload: GetDataPayload = {
password: string;
username: string;
};
const res = await apsUtilityDataService.getServiceAccounts(payload)
```
After data extraction, we will get response as -
```
res: UtilityUserAccountResponse = {
id: string
name: string
serviceAccounts[]: [{id:string, address:Address}]
};
```
```
const res = await apsUtilityDataService.getMonthlyUtilityData(payload)
```
After data extraction, we will get response as -
```
res: MonthlyUtilityData[] = {
id: string
amountInCents: number
energyConsumptionInWatts: number
month: string
serviceAccountId: string
year: number
};
```
## Methods
```
getServiceAccounts: (
payload: GetDataPayload,
) => Promise<UtilityUserAccountResponse>;
getMonthlyUtilityData: (
payload: GetDataPayload,
) => Promise<MonthlyUtilityData[]>;
setProxy:(proxy: string[]) => Promise<void>
```
## Options
```
GetDataPayload = {
password: string;
username: string;
};
WHERE,
password: password of the user-account
username: username of the user-account
proxy:string[]
WHERE,
proxy: VGS proxy we set
```
## Responses
```
UtilityUserAccountResponse = {
id: string
name: string
serviceAccounts[]: [{id:string, address:Address}]
};
WHERE,
id: user-account id
name: Name of the user
serviceAccounts[]: List of service-accounts which are linked to given user-account id
```
```
MonthlyUtilityData[] = {
id: string
amountInCents: number
energyConsumptionInWatts: number
month: string
serviceAccountId: string
year: number
};
WHERE,
id: id of monthly utility data model
amountInCents: Cost of electricity used in respective month and year in cents
energyConsumptionInWatts: Amount of electricity consumed in respective month and year in watts
month: Month of year for which utility data is extracted
serviceAccountId: service-account id for which utility data is extracted
year: Year of calender for which utility data is extracted
```
## Scripts
- `npm run build` - For building the app.
- `npm run test` - Run automated test cases via `mocha` and `chai`.
- `npm run start` - For starting the app.
- `npm run serve` - For building and starting the app with auto-reload on changes.
- `npm run lint` - To perform linting
## Overview
- Typescript support
- Environment specific configuation support.
The application use [config](https://www.npmjs.com/package/config) npm module.
- Linting support
```
npm run lint
```
## Error Handling
- If we pass incorrect credentials for getting utility-data, then...
```
import { APSUtilityDataService } from 'aps-data-api';
const apsUtilityDataService = new APSUtilityDataService();
const payload: GetDataPayload = {
password: incorrect-username;
username: incorrect-password;
};
const res = await apsUtilityDataService.getServiceAccounts(payload)
```
- The Promise gets rejected with `AuthenticationError` with message - `access_denied`
- If we pass correct credentials for getting utility-data, but data extraction failed and service cannot extract data, then...
```
import { APSUtilityDataService } from 'aps-data-api';
const apsUtilityDataService = new APSUtilityDataService();
const payload: GetDataPayload = {
password: correct-username;
username: correct-password;
};
const res = await apsUtilityDataService.getMonthlyUtilityData(payload)
```
- The Promise gets rejected with `DataExtractionError` with message - `Failed to extract data`