@ventlio/tanstack-query 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +6 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +110 -0
- package/dist/index.mjs.map +1 -0
- package/dist/request/axios-instance.d.ts +2 -0
- package/dist/request/axios-instance.js +14 -0
- package/dist/request/axios-instance.js.map +1 -0
- package/dist/request/buildFormData.d.ts +3 -0
- package/dist/request/buildFormData.js +14 -0
- package/dist/request/buildFormData.js.map +1 -0
- package/dist/request/index.d.ts +6 -0
- package/dist/request/make-request.d.ts +2 -0
- package/dist/request/make-request.js +52 -0
- package/dist/request/make-request.js.map +1 -0
- package/dist/request/request.enum.d.ts +11 -0
- package/dist/request/request.enum.js +16 -0
- package/dist/request/request.enum.js.map +1 -0
- package/dist/request/request.interface.d.ts +39 -0
- package/dist/request/transformer.d.ts +7 -0
- package/dist/request/transformer.js +26 -0
- package/dist/request/transformer.js.map +1 -0
- package/dist/useMyHook.d.ts +1 -0
- package/dist/useMyHook.js +14 -0
- package/dist/useMyHook.js.map +1 -0
- package/package.json +68 -0
- package/src/constants/index.ts +1 -0
- package/src/index.ts +3 -0
- package/src/request/axios-instance.ts +12 -0
- package/src/request/buildFormData.ts +11 -0
- package/src/request/index.ts +6 -0
- package/src/request/make-request.ts +63 -0
- package/src/request/request.enum.ts +12 -0
- package/src/request/request.interface.ts +45 -0
- package/src/request/transformer.ts +32 -0
- package/src/useMyHook.ts +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const API_BASE_URL = "";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./constants/index.js');
|
|
4
|
+
var axiosInstance = require('./request/axios-instance.js');
|
|
5
|
+
var buildFormData = require('./request/buildFormData.js');
|
|
6
|
+
var makeRequest = require('./request/make-request.js');
|
|
7
|
+
var request_enum = require('./request/request.enum.js');
|
|
8
|
+
var transformer = require('./request/transformer.js');
|
|
9
|
+
var useMyHook = require('./useMyHook.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.API_BASE_URL = index.API_BASE_URL;
|
|
14
|
+
exports.axiosInstance = axiosInstance.axiosInstance;
|
|
15
|
+
exports.buildFormData = buildFormData.buildFormData;
|
|
16
|
+
exports.makeRequest = makeRequest.makeRequest;
|
|
17
|
+
Object.defineProperty(exports, 'ContentType', {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return request_enum.ContentType; }
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(exports, 'HttpMethod', {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return request_enum.HttpMethod; }
|
|
24
|
+
});
|
|
25
|
+
exports.errorTransformer = transformer.errorTransformer;
|
|
26
|
+
exports.successTransformer = transformer.successTransformer;
|
|
27
|
+
exports.useMyHook = useMyHook.useMyHook;
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
|
|
4
|
+
const API_BASE_URL = '';
|
|
5
|
+
|
|
6
|
+
const axiosInstance = (headers) => {
|
|
7
|
+
return axios.create({
|
|
8
|
+
baseURL: 'https://api.ventlio.com',
|
|
9
|
+
timeout: 100000,
|
|
10
|
+
headers,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const buildFormData = (body) => {
|
|
15
|
+
const formData = new FormData();
|
|
16
|
+
const bodyKeys = Object.keys(body);
|
|
17
|
+
bodyKeys.forEach((key) => {
|
|
18
|
+
formData.append(key, body[key]);
|
|
19
|
+
});
|
|
20
|
+
body = formData;
|
|
21
|
+
return { body };
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
var HttpMethod;
|
|
25
|
+
(function (HttpMethod) {
|
|
26
|
+
HttpMethod["GET"] = "GET";
|
|
27
|
+
HttpMethod["POST"] = "POST";
|
|
28
|
+
HttpMethod["PUT"] = "PUT";
|
|
29
|
+
HttpMethod["PATCH"] = "PATCH";
|
|
30
|
+
HttpMethod["DELETE"] = "DELETE";
|
|
31
|
+
})(HttpMethod || (HttpMethod = {}));
|
|
32
|
+
var ContentType;
|
|
33
|
+
(function (ContentType) {
|
|
34
|
+
ContentType["APPLICATION_JSON"] = "application/json";
|
|
35
|
+
ContentType["MULTIPART_FORM_DATA"] = "multipart/form-data";
|
|
36
|
+
})(ContentType || (ContentType = {}));
|
|
37
|
+
|
|
38
|
+
//
|
|
39
|
+
const errorTransformer = (data) => {
|
|
40
|
+
return {
|
|
41
|
+
message: data.message,
|
|
42
|
+
statusCode: data.statusCode,
|
|
43
|
+
timeStamp: new Date(),
|
|
44
|
+
status: false,
|
|
45
|
+
data: data.data,
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
//
|
|
49
|
+
const successTransformer = (data) => {
|
|
50
|
+
return {
|
|
51
|
+
message: data.message ?? 'Request successful',
|
|
52
|
+
statusCode: data.statusCode,
|
|
53
|
+
timeStamp: new Date(),
|
|
54
|
+
status: true,
|
|
55
|
+
data: data.data,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
async function makeRequest({ body, method = HttpMethod.GET, path, bearerToken, formData, }) {
|
|
60
|
+
// construct api full url
|
|
61
|
+
const apiFullUrl = `${API_BASE_URL}${path}`;
|
|
62
|
+
// configure body
|
|
63
|
+
body = formData ? buildFormData(body) : body;
|
|
64
|
+
// configure request header
|
|
65
|
+
const headers = {
|
|
66
|
+
Authorization: `Bearer ${bearerToken}`,
|
|
67
|
+
};
|
|
68
|
+
if (!formData) {
|
|
69
|
+
headers['Content-Type'] = ContentType.APPLICATION_JSON;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const axios = axiosInstance(headers);
|
|
73
|
+
// send request
|
|
74
|
+
const resp = await axios({
|
|
75
|
+
url: apiFullUrl,
|
|
76
|
+
method,
|
|
77
|
+
data: formData ? body : JSON.stringify(body),
|
|
78
|
+
});
|
|
79
|
+
// get response json
|
|
80
|
+
const jsonResp = await resp.data();
|
|
81
|
+
// get response code
|
|
82
|
+
const responseCode = resp.status;
|
|
83
|
+
if (responseCode > 299) {
|
|
84
|
+
// server returned an error
|
|
85
|
+
return errorTransformer({ ...jsonResp, statusCode: responseCode });
|
|
86
|
+
}
|
|
87
|
+
return successTransformer({
|
|
88
|
+
...jsonResp,
|
|
89
|
+
statusCode: responseCode,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return errorTransformer({
|
|
94
|
+
statusCode: error.status,
|
|
95
|
+
message: error.message,
|
|
96
|
+
code: error.status || error.statusCode,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const useMyHook = () => {
|
|
102
|
+
const [value, setValue] = useState('');
|
|
103
|
+
const updateValue = (newValue) => {
|
|
104
|
+
setValue(newValue);
|
|
105
|
+
};
|
|
106
|
+
return [value, updateValue];
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export { API_BASE_URL, ContentType, HttpMethod, axiosInstance, buildFormData, errorTransformer, makeRequest, successTransformer, useMyHook };
|
|
110
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var axios = require('axios');
|
|
4
|
+
|
|
5
|
+
const axiosInstance = (headers) => {
|
|
6
|
+
return axios.create({
|
|
7
|
+
baseURL: 'https://api.ventlio.com',
|
|
8
|
+
timeout: 100000,
|
|
9
|
+
headers,
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.axiosInstance = axiosInstance;
|
|
14
|
+
//# sourceMappingURL=axios-instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axios-instance.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const buildFormData = (body) => {
|
|
4
|
+
const formData = new FormData();
|
|
5
|
+
const bodyKeys = Object.keys(body);
|
|
6
|
+
bodyKeys.forEach((key) => {
|
|
7
|
+
formData.append(key, body[key]);
|
|
8
|
+
});
|
|
9
|
+
body = formData;
|
|
10
|
+
return { body };
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.buildFormData = buildFormData;
|
|
14
|
+
//# sourceMappingURL=buildFormData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildFormData.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('../constants/index.js');
|
|
4
|
+
var axiosInstance = require('./axios-instance.js');
|
|
5
|
+
var buildFormData = require('./buildFormData.js');
|
|
6
|
+
var request_enum = require('./request.enum.js');
|
|
7
|
+
var transformer = require('./transformer.js');
|
|
8
|
+
|
|
9
|
+
async function makeRequest({ body, method = request_enum.HttpMethod.GET, path, bearerToken, formData, }) {
|
|
10
|
+
// construct api full url
|
|
11
|
+
const apiFullUrl = `${index.API_BASE_URL}${path}`;
|
|
12
|
+
// configure body
|
|
13
|
+
body = formData ? buildFormData.buildFormData(body) : body;
|
|
14
|
+
// configure request header
|
|
15
|
+
const headers = {
|
|
16
|
+
Authorization: `Bearer ${bearerToken}`,
|
|
17
|
+
};
|
|
18
|
+
if (!formData) {
|
|
19
|
+
headers['Content-Type'] = request_enum.ContentType.APPLICATION_JSON;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const axios = axiosInstance.axiosInstance(headers);
|
|
23
|
+
// send request
|
|
24
|
+
const resp = await axios({
|
|
25
|
+
url: apiFullUrl,
|
|
26
|
+
method,
|
|
27
|
+
data: formData ? body : JSON.stringify(body),
|
|
28
|
+
});
|
|
29
|
+
// get response json
|
|
30
|
+
const jsonResp = await resp.data();
|
|
31
|
+
// get response code
|
|
32
|
+
const responseCode = resp.status;
|
|
33
|
+
if (responseCode > 299) {
|
|
34
|
+
// server returned an error
|
|
35
|
+
return transformer.errorTransformer({ ...jsonResp, statusCode: responseCode });
|
|
36
|
+
}
|
|
37
|
+
return transformer.successTransformer({
|
|
38
|
+
...jsonResp,
|
|
39
|
+
statusCode: responseCode,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return transformer.errorTransformer({
|
|
44
|
+
statusCode: error.status,
|
|
45
|
+
message: error.message,
|
|
46
|
+
code: error.status || error.statusCode,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.makeRequest = makeRequest;
|
|
52
|
+
//# sourceMappingURL=make-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-request.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
exports.HttpMethod = void 0;
|
|
4
|
+
(function (HttpMethod) {
|
|
5
|
+
HttpMethod["GET"] = "GET";
|
|
6
|
+
HttpMethod["POST"] = "POST";
|
|
7
|
+
HttpMethod["PUT"] = "PUT";
|
|
8
|
+
HttpMethod["PATCH"] = "PATCH";
|
|
9
|
+
HttpMethod["DELETE"] = "DELETE";
|
|
10
|
+
})(exports.HttpMethod || (exports.HttpMethod = {}));
|
|
11
|
+
exports.ContentType = void 0;
|
|
12
|
+
(function (ContentType) {
|
|
13
|
+
ContentType["APPLICATION_JSON"] = "application/json";
|
|
14
|
+
ContentType["MULTIPART_FORM_DATA"] = "multipart/form-data";
|
|
15
|
+
})(exports.ContentType || (exports.ContentType = {}));
|
|
16
|
+
//# sourceMappingURL=request.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.enum.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { HttpMethod } from './request.enum';
|
|
2
|
+
export interface IMakeRequest {
|
|
3
|
+
path: string;
|
|
4
|
+
body?: BodyInit | null;
|
|
5
|
+
method?: HttpMethod;
|
|
6
|
+
bearerToken?: string;
|
|
7
|
+
formData?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface AxiosInstanceOption {
|
|
10
|
+
bearerToken?: string;
|
|
11
|
+
contentType?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface IRequestError {
|
|
14
|
+
statusCode: number;
|
|
15
|
+
message: string;
|
|
16
|
+
timeStamp: Date;
|
|
17
|
+
status: boolean;
|
|
18
|
+
data?: any;
|
|
19
|
+
}
|
|
20
|
+
export interface IRequestSuccess<T> {
|
|
21
|
+
statusCode: number;
|
|
22
|
+
message: string;
|
|
23
|
+
timeStamp: Date;
|
|
24
|
+
status: boolean;
|
|
25
|
+
data: T;
|
|
26
|
+
}
|
|
27
|
+
export interface IServerRequestSuccess {
|
|
28
|
+
status?: boolean;
|
|
29
|
+
data: any;
|
|
30
|
+
message?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface IServerRequestError {
|
|
33
|
+
status?: boolean;
|
|
34
|
+
code?: number;
|
|
35
|
+
success?: boolean;
|
|
36
|
+
message: string;
|
|
37
|
+
error?: Record<string, any>;
|
|
38
|
+
data?: Record<string, any>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IRequestError, IRequestSuccess, IServerRequestError, IServerRequestSuccess } from './request.interface';
|
|
2
|
+
export declare const errorTransformer: (data: IServerRequestError & {
|
|
3
|
+
statusCode: number;
|
|
4
|
+
}) => IRequestError;
|
|
5
|
+
export declare const successTransformer: <T>(data: IServerRequestSuccess & {
|
|
6
|
+
statusCode: number;
|
|
7
|
+
}) => IRequestSuccess<T>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
//
|
|
4
|
+
const errorTransformer = (data) => {
|
|
5
|
+
return {
|
|
6
|
+
message: data.message,
|
|
7
|
+
statusCode: data.statusCode,
|
|
8
|
+
timeStamp: new Date(),
|
|
9
|
+
status: false,
|
|
10
|
+
data: data.data,
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
//
|
|
14
|
+
const successTransformer = (data) => {
|
|
15
|
+
return {
|
|
16
|
+
message: data.message ?? 'Request successful',
|
|
17
|
+
statusCode: data.statusCode,
|
|
18
|
+
timeStamp: new Date(),
|
|
19
|
+
status: true,
|
|
20
|
+
data: data.data,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.errorTransformer = errorTransformer;
|
|
25
|
+
exports.successTransformer = successTransformer;
|
|
26
|
+
//# sourceMappingURL=transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useMyHook: () => [string, (newValue: string) => void];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
const useMyHook = () => {
|
|
6
|
+
const [value, setValue] = react.useState('');
|
|
7
|
+
const updateValue = (newValue) => {
|
|
8
|
+
setValue(newValue);
|
|
9
|
+
};
|
|
10
|
+
return [value, updateValue];
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.useMyHook = useMyHook;
|
|
14
|
+
//# sourceMappingURL=useMyHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMyHook.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ventlio/tanstack-query",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"author": {
|
|
8
|
+
"email": "ventliodevs@gmail.com",
|
|
9
|
+
"name": "Ventlio",
|
|
10
|
+
"url": "https://ventlio.com"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "rollup --config rollup.config.ts --configPlugin rollup-plugin-typescript2",
|
|
14
|
+
"build:watch": "yarn build -w"
|
|
15
|
+
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@tanstack/react-query": "^4.26.1",
|
|
18
|
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
|
19
|
+
"axios": "^1.3.4",
|
|
20
|
+
"react-native": "*"
|
|
21
|
+
},
|
|
22
|
+
"peerDependenciesMeta": {
|
|
23
|
+
"react-native": {
|
|
24
|
+
"optional": true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"exports": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.mjs",
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@rollup/plugin-commonjs": "^24.0.1",
|
|
34
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
35
|
+
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
36
|
+
"@rollup/plugin-typescript": "^11.0.0",
|
|
37
|
+
"@tanstack/react-query": "^4.26.1",
|
|
38
|
+
"@types/axios": "^0.14.0",
|
|
39
|
+
"@types/node": "*",
|
|
40
|
+
"@types/react": "^18.0.28",
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^5.54.1",
|
|
42
|
+
"@typescript-eslint/parser": "^5.54.1",
|
|
43
|
+
"axios": "^1.3.4",
|
|
44
|
+
"eslint": "^8.36.0",
|
|
45
|
+
"eslint-config-google": "^0.14.0",
|
|
46
|
+
"eslint-config-prettier": "^8.7.0",
|
|
47
|
+
"eslint-import-resolver-typescript": "^3.5.3",
|
|
48
|
+
"eslint-plugin-import": "^2.27.5",
|
|
49
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
50
|
+
"eslint-plugin-react": "^7.32.2",
|
|
51
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
52
|
+
"prettier": "^2.8.4",
|
|
53
|
+
"react": "^18.2.0",
|
|
54
|
+
"rollup": "^3.19.1",
|
|
55
|
+
"rollup-plugin-typescript2": "^0.34.1",
|
|
56
|
+
"ts-node": "^10.9.1",
|
|
57
|
+
"tslib": "^2.5.0",
|
|
58
|
+
"typescript": "^4.9.5"
|
|
59
|
+
},
|
|
60
|
+
"files": [
|
|
61
|
+
"dist/app/*",
|
|
62
|
+
"dist/**/*",
|
|
63
|
+
"src"
|
|
64
|
+
],
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"rmf": "^2.0.0"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const API_BASE_URL = '';
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AxiosInstance, RawAxiosRequestHeaders } from 'axios';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
|
|
4
|
+
export const axiosInstance = (
|
|
5
|
+
headers: RawAxiosRequestHeaders
|
|
6
|
+
): AxiosInstance => {
|
|
7
|
+
return axios.create({
|
|
8
|
+
baseURL: 'https://api.ventlio.com',
|
|
9
|
+
timeout: 100000,
|
|
10
|
+
headers,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { API_BASE_URL } from '../constants';
|
|
2
|
+
import { axiosInstance } from './axios-instance';
|
|
3
|
+
|
|
4
|
+
import { buildFormData } from './buildFormData';
|
|
5
|
+
import { ContentType, HttpMethod } from './request.enum';
|
|
6
|
+
import type { IMakeRequest } from './request.interface';
|
|
7
|
+
import { errorTransformer, successTransformer } from './transformer';
|
|
8
|
+
|
|
9
|
+
export async function makeRequest<TResponse>({
|
|
10
|
+
body,
|
|
11
|
+
method = HttpMethod.GET,
|
|
12
|
+
path,
|
|
13
|
+
bearerToken,
|
|
14
|
+
formData,
|
|
15
|
+
}: IMakeRequest) {
|
|
16
|
+
// construct api full url
|
|
17
|
+
const apiFullUrl = `${API_BASE_URL}${path}`;
|
|
18
|
+
|
|
19
|
+
// configure body
|
|
20
|
+
body = formData ? (buildFormData(body) as any) : body;
|
|
21
|
+
|
|
22
|
+
// configure request header
|
|
23
|
+
const headers: Record<string, any> = {
|
|
24
|
+
Authorization: `Bearer ${bearerToken}`,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
if (!formData) {
|
|
28
|
+
headers['Content-Type'] = ContentType.APPLICATION_JSON;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const axios = axiosInstance(headers);
|
|
33
|
+
|
|
34
|
+
// send request
|
|
35
|
+
const resp = await axios({
|
|
36
|
+
url: apiFullUrl,
|
|
37
|
+
method,
|
|
38
|
+
data: formData ? body : JSON.stringify(body),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// get response json
|
|
42
|
+
const jsonResp: any = await resp.data();
|
|
43
|
+
|
|
44
|
+
// get response code
|
|
45
|
+
const responseCode = resp.status;
|
|
46
|
+
|
|
47
|
+
if (responseCode > 299) {
|
|
48
|
+
// server returned an error
|
|
49
|
+
return errorTransformer({ ...jsonResp, statusCode: responseCode });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return successTransformer<TResponse>({
|
|
53
|
+
...jsonResp,
|
|
54
|
+
statusCode: responseCode,
|
|
55
|
+
});
|
|
56
|
+
} catch (error: any) {
|
|
57
|
+
return errorTransformer({
|
|
58
|
+
statusCode: error.status,
|
|
59
|
+
message: error.message,
|
|
60
|
+
code: error.status || error.statusCode,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { HttpMethod } from './request.enum';
|
|
2
|
+
|
|
3
|
+
export interface IMakeRequest {
|
|
4
|
+
path: string;
|
|
5
|
+
body?: BodyInit | null;
|
|
6
|
+
method?: HttpMethod;
|
|
7
|
+
bearerToken?: string;
|
|
8
|
+
formData?: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface AxiosInstanceOption {
|
|
12
|
+
bearerToken?: string;
|
|
13
|
+
contentType?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface IRequestError {
|
|
17
|
+
statusCode: number;
|
|
18
|
+
message: string;
|
|
19
|
+
timeStamp: Date;
|
|
20
|
+
status: boolean;
|
|
21
|
+
data?: any;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface IRequestSuccess<T> {
|
|
25
|
+
statusCode: number;
|
|
26
|
+
message: string;
|
|
27
|
+
timeStamp: Date;
|
|
28
|
+
status: boolean;
|
|
29
|
+
data: T;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface IServerRequestSuccess {
|
|
33
|
+
status?: boolean;
|
|
34
|
+
data: any;
|
|
35
|
+
message?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface IServerRequestError {
|
|
39
|
+
status?: boolean;
|
|
40
|
+
code?: number;
|
|
41
|
+
success?: boolean;
|
|
42
|
+
message: string;
|
|
43
|
+
error?: Record<string, any>;
|
|
44
|
+
data?: Record<string, any>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
IRequestError,
|
|
3
|
+
IRequestSuccess,
|
|
4
|
+
IServerRequestError,
|
|
5
|
+
IServerRequestSuccess,
|
|
6
|
+
} from './request.interface';
|
|
7
|
+
|
|
8
|
+
//
|
|
9
|
+
export const errorTransformer = (
|
|
10
|
+
data: IServerRequestError & { statusCode: number }
|
|
11
|
+
): IRequestError => {
|
|
12
|
+
return {
|
|
13
|
+
message: data.message,
|
|
14
|
+
statusCode: data.statusCode,
|
|
15
|
+
timeStamp: new Date(),
|
|
16
|
+
status: false,
|
|
17
|
+
data: data.data,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//
|
|
22
|
+
export const successTransformer = <T>(
|
|
23
|
+
data: IServerRequestSuccess & { statusCode: number }
|
|
24
|
+
): IRequestSuccess<T> => {
|
|
25
|
+
return {
|
|
26
|
+
message: data.message ?? 'Request successful',
|
|
27
|
+
statusCode: data.statusCode,
|
|
28
|
+
timeStamp: new Date(),
|
|
29
|
+
status: true,
|
|
30
|
+
data: data.data,
|
|
31
|
+
};
|
|
32
|
+
};
|
package/src/useMyHook.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
|
|
3
|
+
export const useMyHook = (): [string, (newValue: string) => void] => {
|
|
4
|
+
const [value, setValue] = useState('');
|
|
5
|
+
|
|
6
|
+
const updateValue = (newValue: string) => {
|
|
7
|
+
setValue(newValue);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
return [value, updateValue];
|
|
11
|
+
};
|