lh-sdk
Version:
LassondeHacks REST API SDK in Typescript
112 lines (99 loc) • 3.4 kB
text/typescript
import * as request from 'request';
export interface Response {
success: boolean;
msg: string;
err: string;
}
export interface Model {
save(): Promise<boolean>;
delete(): Promise<boolean>;
}
export class SDK {
public static instace: SDK;
private cookie: string;
private api: string;
public static getInstance() {
if (SDK.instace === undefined) {
SDK.instace = new SDK();
}
return SDK.instace;
}
constructor() {
if (process.env.NODE_ENV === 'production') {
this.api = "https://lassondehacks.io/api/";
} else if (process.env.NODE_ENV === 'staging') {
this.api = "http://staging.lassondehacks.io:8080/";
} else {
this.api = "http://localhost:8080/";
}
this.cookie = null;
}
public GET(url: string): Promise<any> {
return new Promise<any>((resolve, reject) => {
let self = this;
request.get(this.api + url, (err, res, body) => {
if (err) {
reject(err);
} else {
try {
if (res.headers["set-cookie"]) {
self.cookie = res.headers["set-cookie"][0];
}
if (typeof (body) === 'string') {
resolve(JSON.parse(body));
} else {
resolve(body);
}
} catch (err) {
reject(err);
}
}
}).setHeader("Cookie", this.cookie);
});
}
public POST(url: string, params: Object): Promise<any> {
return new Promise<any>((resolve, reject) => {
let self = this;
request.post(this.api + url, (err, res, body) => {
if (err) {
reject(err);
} else {
if (res.headers["set-cookie"]) {
self.cookie = res.headers["set-cookie"][0];
}
resolve(body);
}
}).json(params).setHeader("Cookie", this.cookie);
});
}
public PUT(url: string, params: Object): Promise<any> {
return new Promise<any>((resolve, reject) => {
let self = this;
request.put(this.api + url, (err, res, body) => {
if (err) {
reject(err);
} else {
if (res.headers["set-cookie"]) {
self.cookie = res.headers["set-cookie"][0];
}
resolve(body);
}
}).json(params).setHeader("Cookie", this.cookie);
});
}
public DELETE(url: string, params: Object): Promise<any> {
return new Promise<any>((resolve, reject) => {
let self = this;
request.delete(this.api + url, (err, res, body) => {
if (err) {
reject(err);
} else {
if (res.headers["set-cookie"]) {
self.cookie = res.headers["set-cookie"][0];
}
resolve(body);
}
}).json(params).setHeader("Cookie", this.cookie);
});
}
}