Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
# SigfoxJS

![Sigfox Logo img](https://temp.iotdk.dk/wp-content/uploads/2018/01/Sigfox_Logo_RGB_R-300x175.png )
![Sigfox Logo img](https://www.logosvgpng.com/wp-content/uploads/2018/03/sigfox-logo-vector.png)

## [WIP]

```bash
npm install sigfox-js --save
```

```javascript
const SigfoxApi = require('sigfox-js');

Expand All @@ -18,8 +22,8 @@ const infoDevices = await connection.devices.getAllDevices();
#### To Do:

- Users [x]
- Coverages [ ]
- Devices [ ]
- Coverages [x]
- Devices [x]
- Devices Types [ ]
- Groups [ ]
- Tiles [ ]
6,027 changes: 3,709 additions & 2,318 deletions package-lock.json

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@
],
"coveragePathIgnorePatterns": [
"/node_modules/",
"/test/"
"/test/",
"/dist/"
],
"coverageThreshold": {
"global": {
Expand Down Expand Up @@ -108,7 +109,7 @@
"rollup-plugin-json": "^3.1.0",
"rollup-plugin-node-resolve": "^3.4.0",
"rollup-plugin-sourcemaps": "^0.4.2",
"rollup-plugin-typescript2": "^0.18.0",
"rollup-plugin-typescript2": "^0.25.3",
"semantic-release": "^15.13.3",
"shelljs": "^0.8.3",
"travis-deploy-once": "^5.0.9",
Expand All @@ -117,7 +118,7 @@
"tslint": "^5.11.0",
"tslint-config-prettier": "^1.15.0",
"tslint-config-standard": "^8.0.1",
"typedoc": "^0.12.0",
"typedoc": "^0.15.3",
"typescript": "^3.0.3"
},
"dependencies": {
Expand Down
8 changes: 4 additions & 4 deletions rollup.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ export default {
input: `src/${libraryName}.ts`,
output: [
{ file: pkg.main, name: camelCase(libraryName), format: 'umd', sourcemap: true },
{ file: pkg.module, format: 'es', sourcemap: true },
{ file: pkg.module, format: 'es', sourcemap: true }
],
// Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash')
external: [],
watch: {
include: 'src/**',
include: 'src/**'
},
plugins: [
// Allow json resolution
Expand All @@ -33,6 +33,6 @@ export default {
resolve(),

// Resolve source maps to the original source
sourceMaps(),
],
sourceMaps()
]
}
10 changes: 10 additions & 0 deletions src/core/base/base-class-module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Requester } from '../helpers/requester'

export abstract class ModuleBase {
requester!: Requester

protected constructor(public requesterService: Requester) {
Requester.getInstance()
this.requesterService = requesterService
}
}
4 changes: 3 additions & 1 deletion src/config/constants.ts → src/core/config/constants.ts
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const API_CONFIG = {
import { IConfiguration } from '../types/config'

export const API_CONFIG: IConfiguration = {
baseURL: 'https://api.sigfox.com/v2',
headers: {
Accept: 'application/json',
Expand Down
3 changes: 3 additions & 0 deletions src/core/decorators/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function apiConfig() {
console.log('lol')
}
47 changes: 47 additions & 0 deletions src/core/helpers/requester.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { RequesterInfo } from '../types/requester/requester'
import { API_CONFIG } from '../config/constants'

export class Requester {
private static instance: Requester

config: object

constructor(config: object) {
this.config = config
}

public static getInstance(config?: object): Requester {
if (!Requester.instance) {
Requester.instance = new Requester({ config })
}
return Requester.instance
}

public async post<T>(info: RequesterInfo): Promise<T> {
return this.doFetch<T>(API_CONFIG.baseURL + info.url, 'POST', info.data)
}

public async put<T>(info: RequesterInfo): Promise<T> {
return this.doFetch<T>(API_CONFIG.baseURL + info.url, 'PUT', info.data)
}

public get<T>(info: RequesterInfo): Promise<T> {
return this.doFetch<T>(API_CONFIG.baseURL + info.url, 'GET')
}

public delete<T>(info: RequesterInfo): Promise<T> {
return this.doFetch<T>(API_CONFIG.baseURL + info.url, 'DELETE')
}

private async doFetch<T>(url: string, method: string, body?: any): Promise<T> {
const objToSend = {
method,
headers: { 'Content-Type': 'application/json' },
body: body ? body : {}
}

return fetch(API_CONFIG.baseURL + url, objToSend)
.then(response => response.json())
.catch(error => error.error)
}
}
11 changes: 11 additions & 0 deletions src/core/types/config-params.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { IConfiguration } from './config'

export interface ConfigParams {
username: string
password: string
}

export interface CustomParams {
auth: ConfigParams
apiConfig: IConfiguration
}
9 changes: 9 additions & 0 deletions src/core/types/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export interface IConfiguration {
baseURL: 'https://api.sigfox.com/v2'
headers: IHeaders
}

export interface IHeaders {
Accept: string
'Content-Type': string
}
4 changes: 4 additions & 0 deletions src/core/types/requester/requester.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export interface RequesterInfo {
url: string
data?: object
}
79 changes: 79 additions & 0 deletions src/modules/coverages/coverages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { Requester } from '../../core/helpers/requester'
import { GlobalPredictions, Redundancy } from './types/predictions'
import { ModuleBase } from '../../core/base/base-class-module'

export class Coverages extends ModuleBase {
private static instance: Coverages

constructor(requester: Requester) {
super(requester)
}

public static getInstance(config: Requester): Coverages {
if (!Coverages.instance) {
Coverages.instance = new Coverages(config)
}
return Coverages.instance
}

/**
* Get coverage margins for a selected latitude and longitude, for each redundancy level.
* HTTP GET /coverages/global/predictions?lat=55&lng=55&radius=300
* @returns {{locationCovered}, margins[]}
*/
public getCoverageMargins(
latitude: number,
longitude: number,
radius: number
): Promise<GlobalPredictions> {
const infoDevice = {
url: `/coverages/global/predictions?lat=${latitude}&lng=${longitude}&radius=${radius}`
}
return this.requester.get<GlobalPredictions>(infoDevice)
}

/**
* Get the coverage margins for multiple points, for each redundancy level.
* HTTP POST /coverages/global/predictions
* @returns {{locationCovered}, margins[]}
*/
public postCoverageMargins(
latitude: number,
longitude: number,
radius: number,
groupId: string
): Promise<GlobalPredictions> {
const infoDevice = {
url: `/coverages/global/predictions`,
data: {
locations: [
{
lat: latitude,
lng: longitude
}
],
radius,
groupId
}
}
return this.requester.post<GlobalPredictions>(infoDevice)
}

/**
* Get operator coverage redundancy for a selected latitude and longitude, for specific device situation.
* HTTP GET /coverages/operators/redundancy?lat=${latitude}&lng=${longitude}&deviceSituation=${deviceSituation}&deviceClassId=${deviceClassId}
* @returns {{redundancy}}
*/
public getOperatorRedundancy(
latitude: number,
longitude: number,
deviceSituation: string,
deviceClassId: number
): Promise<Redundancy> {
const infoDevice = {
url: `/coverages/operators/redundancy?lat=${latitude}&lng=${longitude}&deviceSituation=${deviceSituation}&deviceClassId=${deviceClassId}`
}

return this.requester.get<Redundancy>(infoDevice)
}
}
14 changes: 14 additions & 0 deletions src/modules/coverages/test/coverage.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Coverages } from '../coverages'
import { Requester } from '../../../core/helpers/requester'

describe('Coverages Test', () => {
let coveragesModule: Coverages

beforeEach(() => {
coveragesModule = Coverages.getInstance(Requester.getInstance())
})

it('builds', () => {
expect(coveragesModule).toBeTruthy()
})
})
8 changes: 8 additions & 0 deletions src/modules/coverages/types/predictions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export interface GlobalPredictions {
locationCovered: boolean
margins: [number]
}

export interface Redundancy {
redundancy: number
}
Loading