larapi 0.2.18 → 0.2.20
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/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/lib/Core.d.ts +2 -2
- package/lib/Http.d.ts +13 -12
- package/lib/index.d.ts +40 -37
- package/lib/types.d.ts +22 -4
- package/package.json +2 -2
- package/src/Core.ts +1 -1
- package/src/Http.ts +85 -65
- package/src/index.ts +56 -34
- package/src/types.ts +42 -11
package/lib/Http.d.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import Core from "./Core";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import type { TMethod, TParams, TData, TRequestParams, TListenerEvents, TRequestProgress, TResponseData } from "./types";
|
|
2
|
+
import { EventListener } from "easy-event-emitter";
|
|
3
|
+
import type { TMethod, TParams, TData, TListenerEvents, TRequestProgress, TResponseData } from "./types";
|
|
5
4
|
declare class Http<D extends TResponseData = TResponseData, PATH = any, DATA extends ((...args: any) => any) = any> extends Core {
|
|
6
5
|
private cacheIndex;
|
|
7
|
-
currentCache
|
|
8
|
-
currentEvents
|
|
9
|
-
requestParams
|
|
10
|
-
method
|
|
11
|
-
params
|
|
12
|
-
path
|
|
13
|
-
queue
|
|
14
|
-
queueName
|
|
6
|
+
private currentCache?;
|
|
7
|
+
private currentEvents;
|
|
8
|
+
private requestParams;
|
|
9
|
+
private method;
|
|
10
|
+
private params;
|
|
11
|
+
private path;
|
|
12
|
+
private queue;
|
|
13
|
+
private queueName;
|
|
14
|
+
private _promise?;
|
|
15
15
|
constructor(method: TMethod, params: TParams<PATH, DATA>, context?: Core);
|
|
16
16
|
private initRequest;
|
|
17
17
|
private initCache;
|
|
18
|
+
get promise(): Promise<DATA> | undefined;
|
|
18
19
|
private initQueue;
|
|
19
20
|
private setEmit;
|
|
20
21
|
success(data: any): void;
|
|
@@ -26,7 +27,7 @@ declare class Http<D extends TResponseData = TResponseData, PATH = any, DATA ext
|
|
|
26
27
|
private cuteUndifinedParams;
|
|
27
28
|
request(): this;
|
|
28
29
|
addHeader(key: string, value: string): this;
|
|
29
|
-
addListener(event:
|
|
30
|
+
addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener;
|
|
30
31
|
deleteHeader(key: string): this;
|
|
31
32
|
updateCache(data: TData, fieldKey?: string | null): void;
|
|
32
33
|
clearCache(data?: TData, fieldKey?: string | null): void;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,54 +1,61 @@
|
|
|
1
1
|
import Core from "./Core";
|
|
2
|
-
import type { TUser, TConfig, TMethod, TParams, TResponseData, TListenerEvents } from "./types";
|
|
3
|
-
import type {
|
|
2
|
+
import type { TUser, TConfig, TMethod, TParams, TResponseData, TListenerEvents, TData } from "./types";
|
|
3
|
+
import type { EventListener } from "easy-event-emitter";
|
|
4
4
|
import Http from "./Http";
|
|
5
5
|
/** Laravel API Client */
|
|
6
6
|
declare class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S extends D['success'] = D['success']> extends Core {
|
|
7
7
|
private static instance;
|
|
8
8
|
private _user;
|
|
9
|
-
token
|
|
9
|
+
private token?;
|
|
10
|
+
private csrfToken?;
|
|
10
11
|
constructor(config: TConfig);
|
|
11
|
-
http<PATH extends keyof S
|
|
12
|
-
get<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA, 'GET'>): Http<D,
|
|
13
|
-
head<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
14
|
-
post<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
15
|
-
put<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
16
|
-
patch<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
17
|
-
delete<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
18
|
-
options<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
19
|
-
connect<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
20
|
-
trace<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>): Http<D,
|
|
21
|
-
addListener(event:
|
|
22
|
-
setToken(token: string):
|
|
12
|
+
http<DATA extends S[PATH]['?'], PATH extends keyof S = keyof S>(method: TMethod, params: TParams<PATH, DATA>): Http<D, PATH, DATA>;
|
|
13
|
+
get<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA, 'GET'>): Http<D, keyof S, Data>;
|
|
14
|
+
head<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
15
|
+
post<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
16
|
+
put<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
17
|
+
patch<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
18
|
+
delete<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
19
|
+
options<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
20
|
+
connect<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
21
|
+
trace<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>): Http<D, keyof S, Data>;
|
|
22
|
+
addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener;
|
|
23
|
+
setToken(token: string): void;
|
|
24
|
+
setCSRFToken(csrfToken: string): void;
|
|
23
25
|
getToken(): string | undefined;
|
|
26
|
+
getCSRFToken(): string | undefined;
|
|
24
27
|
getUid(): number;
|
|
25
28
|
getUser(): U;
|
|
26
29
|
get uid(): number;
|
|
27
30
|
get user(): U;
|
|
28
|
-
|
|
31
|
+
setLogin(user: U, token?: string): void;
|
|
32
|
+
setUser(user: U): void;
|
|
29
33
|
updateUser(user: U): void;
|
|
30
34
|
logout(): Promise<void>;
|
|
31
|
-
static http: <PATH extends string | number
|
|
32
|
-
static get: <PATH extends string | number, DATA extends
|
|
33
|
-
static head: <PATH extends string | number, DATA extends
|
|
34
|
-
static post: <PATH extends string | number, DATA extends
|
|
35
|
-
static put: <PATH extends string | number, DATA extends
|
|
36
|
-
static patch: <PATH extends string | number, DATA extends
|
|
37
|
-
static delete: <PATH extends string | number, DATA extends
|
|
38
|
-
static options: <PATH extends string | number, DATA extends
|
|
39
|
-
static connect: <PATH extends string | number, DATA extends
|
|
40
|
-
static trace: <PATH extends string | number, DATA extends
|
|
35
|
+
static http: <DATA extends TData[PATH]["?"], PATH extends string | number = string | number>(method: TMethod, params: TParams<PATH, DATA>) => Http<TResponseData, PATH, DATA>;
|
|
36
|
+
static get: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA, "GET">) => Http<TResponseData, string | number, Data>;
|
|
37
|
+
static head: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
38
|
+
static post: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
39
|
+
static put: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
40
|
+
static patch: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
41
|
+
static delete: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
42
|
+
static options: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
43
|
+
static connect: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
44
|
+
static trace: <Data extends TData[PATH]["?"], PATH extends string | number = string | number, DATA extends TData[PATH] = TData[PATH]>(params: TParams<PATH, DATA>) => Http<TResponseData, string | number, Data>;
|
|
41
45
|
static setConfig: (config: TConfig) => void;
|
|
42
46
|
static setHost: (host: string) => void;
|
|
43
|
-
static setUser: (user: TUser) =>
|
|
47
|
+
static setUser: (user: TUser) => void;
|
|
44
48
|
static updateUser: (user: TUser) => void;
|
|
45
49
|
static logout: () => Promise<void>;
|
|
46
|
-
static setToken: (token: string) =>
|
|
47
|
-
static
|
|
50
|
+
static setToken: (token: string) => void;
|
|
51
|
+
static setLogin: (user: TUser, token?: string) => void;
|
|
52
|
+
static addListener: <EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void) => EventListener;
|
|
48
53
|
static setInitData: (data: import("./types").TGroupsData) => void;
|
|
54
|
+
static setCSRFToken: (csrfToken: string) => void;
|
|
55
|
+
static getCSRFToken: () => string | undefined;
|
|
49
56
|
static triggerByCacheGroup: (groups: string | string[]) => void;
|
|
50
|
-
static clearCacheGroup: (groups: string | string[], data?:
|
|
51
|
-
static updateCacheGroup: (groups: string | string[], data:
|
|
57
|
+
static clearCacheGroup: (groups: string | string[], data?: TData | undefined, fieldKey?: string | null) => void;
|
|
58
|
+
static updateCacheGroup: (groups: string | string[], data: TData, fieldKey?: string | null) => void;
|
|
52
59
|
static getToken: () => string | undefined;
|
|
53
60
|
static getUid: () => number;
|
|
54
61
|
static getUser: () => TUser;
|
|
@@ -57,11 +64,7 @@ declare class API<D extends TResponseData = TResponseData, U extends TUser = TUs
|
|
|
57
64
|
/**
|
|
58
65
|
* @deprecated The method should not be used
|
|
59
66
|
*/
|
|
60
|
-
static deleteCacheGroup: (groups: string | string[], data?:
|
|
67
|
+
static deleteCacheGroup: (groups: string | string[], data?: TData | undefined, fieldKey?: string | null) => void;
|
|
61
68
|
}
|
|
62
|
-
export type {
|
|
63
|
-
/**
|
|
64
|
-
* @deprecated The type should not be used
|
|
65
|
-
*/
|
|
66
|
-
Event, Event as EventListener, TResponseData };
|
|
69
|
+
export type { EventListener, TResponseData };
|
|
67
70
|
export default API;
|
package/lib/types.d.ts
CHANGED
|
@@ -19,6 +19,9 @@ export type TData = {
|
|
|
19
19
|
export type TGroupsData = {
|
|
20
20
|
[index: string]: TData;
|
|
21
21
|
};
|
|
22
|
+
export type TRequestHeaders = {
|
|
23
|
+
[index: string]: string;
|
|
24
|
+
};
|
|
22
25
|
export type TMethod = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'CONNECT' | 'TRACE';
|
|
23
26
|
export type TCacheControll = string | {
|
|
24
27
|
group: string;
|
|
@@ -44,6 +47,7 @@ export type TConfig = {
|
|
|
44
47
|
host: string;
|
|
45
48
|
reviver?: (this: any, key: string, value: any) => any;
|
|
46
49
|
dataReviver?: TConfigDataReviver;
|
|
50
|
+
headers?: TRequestHeaders;
|
|
47
51
|
};
|
|
48
52
|
export type TResponseData = {
|
|
49
53
|
success: TData;
|
|
@@ -58,6 +62,7 @@ export type TParams<P = string | keyof TResponseData['success'], D extends ((...
|
|
|
58
62
|
cacheClear?: TCacheControll | TCacheControll[];
|
|
59
63
|
globalName?: string;
|
|
60
64
|
queueThrottling?: boolean;
|
|
65
|
+
headers?: TRequestHeaders;
|
|
61
66
|
success?: (data: ReturnType<D>) => void;
|
|
62
67
|
error?: (error: E) => void;
|
|
63
68
|
fail?: (fail: F) => void;
|
|
@@ -66,10 +71,23 @@ export type TParams<P = string | keyof TResponseData['success'], D extends ((...
|
|
|
66
71
|
};
|
|
67
72
|
export type TRequestParams = {
|
|
68
73
|
method: TMethod;
|
|
69
|
-
headers?:
|
|
70
|
-
[index: string]: string;
|
|
71
|
-
};
|
|
74
|
+
headers?: TRequestHeaders;
|
|
72
75
|
body?: string;
|
|
73
76
|
withoutResponse?: boolean;
|
|
74
77
|
};
|
|
75
|
-
export type TListenerEvents =
|
|
78
|
+
export type TListenerEvents = {
|
|
79
|
+
'api-request-success': any;
|
|
80
|
+
'api-request-fail': any;
|
|
81
|
+
'api-request-error': any;
|
|
82
|
+
'api-request-complete': any;
|
|
83
|
+
'api-request-progress': any;
|
|
84
|
+
'login': {
|
|
85
|
+
user: any;
|
|
86
|
+
token: string;
|
|
87
|
+
};
|
|
88
|
+
'logout': any;
|
|
89
|
+
'user-set': any;
|
|
90
|
+
'user-update': any;
|
|
91
|
+
'token-update': string;
|
|
92
|
+
'csrf-token-update': string;
|
|
93
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "larapi",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.20",
|
|
4
4
|
"description": "API client for laravel",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"webpack-cli": "^5.1.4"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"easy-event-emitter": "^1.
|
|
45
|
+
"easy-event-emitter": "^1.1.5",
|
|
46
46
|
"md5": "^2.3.0"
|
|
47
47
|
}
|
|
48
48
|
}
|
package/src/Core.ts
CHANGED
package/src/Http.ts
CHANGED
|
@@ -2,8 +2,7 @@ import md5 from 'md5';
|
|
|
2
2
|
import Core from "./Core";
|
|
3
3
|
import Queue from './Queue';
|
|
4
4
|
import EventEmitter,{
|
|
5
|
-
|
|
6
|
-
Events
|
|
5
|
+
EventListener
|
|
7
6
|
} from "easy-event-emitter";
|
|
8
7
|
import type {
|
|
9
8
|
TMethod,
|
|
@@ -18,14 +17,15 @@ import type {
|
|
|
18
17
|
|
|
19
18
|
class Http<D extends TResponseData = TResponseData, PATH = any, DATA extends ((...args: any) => any) = any> extends Core {
|
|
20
19
|
private cacheIndex: string;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
private currentCache?: TData;
|
|
21
|
+
private currentEvents: EventEmitter
|
|
22
|
+
private requestParams: TRequestParams;
|
|
23
|
+
private method: TMethod;
|
|
24
|
+
private params: TParams<PATH, DATA>;
|
|
25
|
+
private path: string;
|
|
26
|
+
private queue: Queue<D>;
|
|
27
|
+
private queueName: string;
|
|
28
|
+
private _promise?: Promise<DATA>;
|
|
29
29
|
|
|
30
30
|
constructor(method: TMethod, params: TParams<PATH, DATA>, context?: Core) {
|
|
31
31
|
super(context);
|
|
@@ -58,7 +58,8 @@ class Http<D extends TResponseData = TResponseData, PATH = any, DATA extends ((.
|
|
|
58
58
|
private initRequest(): void {
|
|
59
59
|
this.requestParams.headers = {
|
|
60
60
|
'Accept': 'application/json',
|
|
61
|
-
'Content-Type': 'application/json'
|
|
61
|
+
'Content-Type': 'application/json',
|
|
62
|
+
...this.params.headers
|
|
62
63
|
};
|
|
63
64
|
|
|
64
65
|
this.params.data = this.params.data ? this.cuteUndifinedParams(this.params.data) : this.params.data;
|
|
@@ -103,11 +104,15 @@ class Http<D extends TResponseData = TResponseData, PATH = any, DATA extends ((.
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
|
|
107
|
+
public get promise() {
|
|
108
|
+
return this._promise;
|
|
109
|
+
}
|
|
110
|
+
|
|
106
111
|
private initQueue(): void {
|
|
107
112
|
this.queueName = this.params.queueThrottling ? md5(this.path) : this.cacheIndex;
|
|
108
113
|
}
|
|
109
114
|
|
|
110
|
-
private setEmit(event:
|
|
115
|
+
private setEmit<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, data: DATA) {
|
|
111
116
|
this.currentEvents.emit(event, data);
|
|
112
117
|
this.events.emit(event, {
|
|
113
118
|
cacheIndex: this.cacheIndex,
|
|
@@ -200,64 +205,79 @@ class Http<D extends TResponseData = TResponseData, PATH = any, DATA extends ((.
|
|
|
200
205
|
public request(): this {
|
|
201
206
|
if (typeof XMLHttpRequest === 'undefined' || this.currentCache || this.queue.push(this.queueName)) return this;
|
|
202
207
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
xhr.open(this.method, this.config.host + this.path, true);
|
|
207
|
-
for(const header in this.requestParams.headers) {
|
|
208
|
-
xhr.setRequestHeader(header, this.requestParams.headers[header]);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
if (xhr.upload) {
|
|
212
|
-
xhr.upload.onprogress = ({lengthComputable, loaded, total}) => {
|
|
213
|
-
if (lengthComputable) {
|
|
214
|
-
this.progress({
|
|
215
|
-
percent: (loaded / total * 100),
|
|
216
|
-
total,
|
|
217
|
-
loaded
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
xhr.onabort = () => {
|
|
224
|
-
this.fail({
|
|
225
|
-
message: 'request abort'
|
|
226
|
-
});
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
xhr.onerror = () => {
|
|
230
|
-
this.error({
|
|
231
|
-
message: 'request error'
|
|
232
|
-
});
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
xhr.onreadystatechange = () => {
|
|
236
|
-
if (xhr.readyState !== 4) return;
|
|
208
|
+
this._promise = new Promise((resolve, reject) => {
|
|
209
|
+
try {
|
|
210
|
+
const xhr = new XMLHttpRequest();
|
|
237
211
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
212
|
+
xhr.open(this.method, this.config.host + this.path, true);
|
|
213
|
+
for(const header in this.requestParams.headers) {
|
|
214
|
+
xhr.setRequestHeader(header, this.requestParams.headers[header]);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (xhr.upload) {
|
|
218
|
+
xhr.upload.onprogress = ({lengthComputable, loaded, total}) => {
|
|
219
|
+
if (lengthComputable) {
|
|
220
|
+
this.progress({
|
|
221
|
+
percent: (loaded / total * 100),
|
|
222
|
+
total,
|
|
223
|
+
loaded
|
|
224
|
+
});
|
|
225
|
+
}
|
|
243
226
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
xhr.onabort = () => {
|
|
230
|
+
reject({
|
|
231
|
+
type: 'abort',
|
|
232
|
+
message: 'request abort'
|
|
233
|
+
});
|
|
234
|
+
this.fail({
|
|
235
|
+
message: 'request abort'
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
xhr.onerror = () => {
|
|
240
|
+
reject({
|
|
241
|
+
type: 'error',
|
|
242
|
+
message: 'request error'
|
|
243
|
+
});
|
|
244
|
+
this.error({
|
|
245
|
+
message: 'request error'
|
|
246
|
+
});
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
xhr.onreadystatechange = () => {
|
|
250
|
+
if (xhr.readyState !== 4) return;
|
|
251
|
+
|
|
252
|
+
const result = (!this.requestParams.withoutResponse && this.isJsonString(xhr.responseText)) ? this.jsonParse(xhr.responseText) : {};
|
|
253
|
+
|
|
254
|
+
if (xhr.status >= 200 && xhr.status <= 299) {
|
|
255
|
+
if (this.params.cache) {
|
|
256
|
+
this.setCache(this.cacheIndex, result, (typeof this.params.cache === 'boolean' ? undefined : this.params.cache));
|
|
257
|
+
}
|
|
258
|
+
resolve(result);
|
|
259
|
+
this.success(result);
|
|
248
260
|
}else{
|
|
249
|
-
|
|
250
|
-
|
|
261
|
+
if (xhr.status >= 400 && xhr.status <= 499) {
|
|
262
|
+
reject(result);
|
|
263
|
+
this.fail(result);
|
|
264
|
+
}else{
|
|
265
|
+
reject(result);
|
|
266
|
+
this.error(result);
|
|
267
|
+
console.warn(result);
|
|
268
|
+
}
|
|
251
269
|
}
|
|
270
|
+
this.complete(result);
|
|
271
|
+
this.queue.clear(this.queueName);
|
|
252
272
|
}
|
|
253
|
-
this.
|
|
254
|
-
|
|
273
|
+
xhr.send(this.requestParams.body);
|
|
274
|
+
}catch(e) {
|
|
275
|
+
reject(e);
|
|
276
|
+
console.warn(e);
|
|
277
|
+
throw e;
|
|
255
278
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
console.warn(e);
|
|
259
|
-
throw e;
|
|
260
|
-
}
|
|
279
|
+
});
|
|
280
|
+
|
|
261
281
|
return this
|
|
262
282
|
}
|
|
263
283
|
|
|
@@ -266,7 +286,7 @@ class Http<D extends TResponseData = TResponseData, PATH = any, DATA extends ((.
|
|
|
266
286
|
return this;
|
|
267
287
|
}
|
|
268
288
|
|
|
269
|
-
public addListener(event:
|
|
289
|
+
public addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener {
|
|
270
290
|
return this.currentEvents.addListener(event, callback);
|
|
271
291
|
}
|
|
272
292
|
|
package/src/index.ts
CHANGED
|
@@ -5,10 +5,11 @@ import type {
|
|
|
5
5
|
TMethod,
|
|
6
6
|
TParams,
|
|
7
7
|
TResponseData,
|
|
8
|
-
TListenerEvents
|
|
8
|
+
TListenerEvents,
|
|
9
|
+
TData
|
|
9
10
|
} from "./types";
|
|
10
11
|
import type {
|
|
11
|
-
|
|
12
|
+
EventListener
|
|
12
13
|
} from "easy-event-emitter";
|
|
13
14
|
import Http from "./Http";
|
|
14
15
|
|
|
@@ -19,7 +20,8 @@ class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S ex
|
|
|
19
20
|
host: ''
|
|
20
21
|
});
|
|
21
22
|
private _user: U;
|
|
22
|
-
|
|
23
|
+
private token?: string;
|
|
24
|
+
private csrfToken?: string;
|
|
23
25
|
|
|
24
26
|
constructor(config: TConfig) {
|
|
25
27
|
super();
|
|
@@ -27,10 +29,13 @@ class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S ex
|
|
|
27
29
|
this._user = {} as U;
|
|
28
30
|
|
|
29
31
|
this.setToken = this.setToken.bind(this);
|
|
32
|
+
this.setCSRFToken = this.setCSRFToken.bind(this);
|
|
33
|
+
this.setLogin = this.setLogin.bind(this);
|
|
30
34
|
this.setUser = this.setUser.bind(this);
|
|
31
35
|
this.updateUser = this.updateUser.bind(this);
|
|
32
36
|
this.logout = this.logout.bind(this);
|
|
33
37
|
this.getToken = this.getToken.bind(this);
|
|
38
|
+
this.getCSRFToken = this.getCSRFToken.bind(this);
|
|
34
39
|
this.http = this.http.bind(this);
|
|
35
40
|
this.get = this.get.bind(this);
|
|
36
41
|
this.head = this.head.bind(this);
|
|
@@ -46,62 +51,71 @@ class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S ex
|
|
|
46
51
|
this.addListener = this.addListener.bind(this);
|
|
47
52
|
}
|
|
48
53
|
|
|
49
|
-
public http<PATH extends keyof S
|
|
54
|
+
public http<DATA extends S[PATH]['?'], PATH extends keyof S = keyof S>(method: TMethod, params: TParams<PATH, DATA>) {
|
|
50
55
|
const http = new Http<D, PATH, DATA>(method, params, this);
|
|
51
|
-
if (this.token)
|
|
52
|
-
|
|
53
|
-
}
|
|
56
|
+
if (this.token) http.addHeader('Authorization', 'Bearer ' + this.token);
|
|
57
|
+
if (this.csrfToken) http.addHeader('X-CSRF-TOKEN', this.csrfToken);
|
|
54
58
|
return http;
|
|
55
59
|
}
|
|
56
60
|
|
|
57
|
-
public get<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA, 'GET'>) {
|
|
58
|
-
return this.http('GET', params).request();
|
|
61
|
+
public get<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA, 'GET'>) {
|
|
62
|
+
return this.http<Data>('GET', params).request();
|
|
59
63
|
}
|
|
60
64
|
|
|
61
|
-
public head<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
62
|
-
return this.http('HEAD', params).request();
|
|
65
|
+
public head<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
66
|
+
return this.http<Data>('HEAD', params).request();
|
|
63
67
|
}
|
|
64
68
|
|
|
65
|
-
public post<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
66
|
-
return this.http('POST', params).request();
|
|
69
|
+
public post<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
70
|
+
return this.http<Data>('POST', params).request();
|
|
67
71
|
}
|
|
68
72
|
|
|
69
|
-
public put<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
70
|
-
return this.http('PUT', params).request();
|
|
73
|
+
public put<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
74
|
+
return this.http<Data>('PUT', params).request();
|
|
71
75
|
}
|
|
72
76
|
|
|
73
|
-
public patch<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
74
|
-
return this.http('PATCH', params).request();
|
|
77
|
+
public patch<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
78
|
+
return this.http<Data>('PATCH', params).request();
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
public delete<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
78
|
-
return this.http('DELETE', params).request();
|
|
81
|
+
public delete<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
82
|
+
return this.http<Data>('DELETE', params).request();
|
|
79
83
|
}
|
|
80
84
|
|
|
81
|
-
public options<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
82
|
-
return this.http('OPTIONS', params).request();
|
|
85
|
+
public options<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
86
|
+
return this.http<Data>('OPTIONS', params).request();
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
public connect<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
86
|
-
return this.http('CONNECT', params).request();
|
|
89
|
+
public connect<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
90
|
+
return this.http<Data>('CONNECT', params).request();
|
|
87
91
|
}
|
|
88
92
|
|
|
89
|
-
public trace<PATH extends keyof S, DATA extends S[PATH]>(params: TParams<PATH, DATA>) {
|
|
90
|
-
return this.http('TRACE', params).request();
|
|
93
|
+
public trace<Data extends S[PATH]['?'], PATH extends keyof S = keyof S, DATA extends S[PATH] = S[PATH]>(params: TParams<PATH, DATA>) {
|
|
94
|
+
return this.http<Data>('TRACE', params).request();
|
|
91
95
|
}
|
|
92
96
|
|
|
93
|
-
public addListener(event:
|
|
97
|
+
public addListener<EVENT extends keyof TListenerEvents, DATA extends TListenerEvents[EVENT]>(event: EVENT, callback: (data: DATA) => void): EventListener {
|
|
94
98
|
return this.events.addListener(event, callback);
|
|
95
99
|
}
|
|
96
100
|
|
|
97
|
-
public
|
|
101
|
+
public setToken(token: string) {
|
|
98
102
|
this.token = token;
|
|
103
|
+
this.events.emit('token-update', token);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public setCSRFToken(csrfToken: string) {
|
|
107
|
+
this.csrfToken = csrfToken;
|
|
108
|
+
this.events.emit('csrf-token-update', csrfToken);
|
|
99
109
|
}
|
|
100
110
|
|
|
101
111
|
public getToken() {
|
|
102
112
|
return this.token;
|
|
103
113
|
}
|
|
104
114
|
|
|
115
|
+
public getCSRFToken() {
|
|
116
|
+
return this.csrfToken;
|
|
117
|
+
}
|
|
118
|
+
|
|
105
119
|
public getUid(): number {
|
|
106
120
|
return (typeof this._user === 'object' && 'id' in this._user) ? Number(this._user.id) : 0;
|
|
107
121
|
}
|
|
@@ -118,9 +132,18 @@ class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S ex
|
|
|
118
132
|
return this.getUser();
|
|
119
133
|
}
|
|
120
134
|
|
|
121
|
-
public
|
|
135
|
+
public setLogin(user: U, token: string = '') {
|
|
136
|
+
this.setUser(user);
|
|
137
|
+
this.setToken(token);
|
|
138
|
+
this.events.emit('login', {
|
|
139
|
+
user,
|
|
140
|
+
token
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
public setUser(user: U) {
|
|
122
145
|
this._user = user;
|
|
123
|
-
this.events.emit('
|
|
146
|
+
this.events.emit('user-set', user);
|
|
124
147
|
}
|
|
125
148
|
|
|
126
149
|
public updateUser(user: U) {
|
|
@@ -152,8 +175,11 @@ class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S ex
|
|
|
152
175
|
public static updateUser = this.instance.updateUser;
|
|
153
176
|
public static logout = this.instance.logout;
|
|
154
177
|
public static setToken = this.instance.setToken;
|
|
178
|
+
public static setLogin = this.instance.setLogin;
|
|
155
179
|
public static addListener = this.instance.addListener;
|
|
156
180
|
public static setInitData = this.instance.setInitData;
|
|
181
|
+
public static setCSRFToken = this.instance.setCSRFToken;
|
|
182
|
+
public static getCSRFToken = this.instance.getCSRFToken;
|
|
157
183
|
public static triggerByCacheGroup = this.instance.triggerByCacheGroup;
|
|
158
184
|
public static clearCacheGroup = this.instance.clearCacheGroup;
|
|
159
185
|
public static updateCacheGroup = this.instance.updateCacheGroup;
|
|
@@ -171,11 +197,7 @@ class API<D extends TResponseData = TResponseData, U extends TUser = TUser, S ex
|
|
|
171
197
|
|
|
172
198
|
(globalThis as any).apiSetInitData = API.setInitData;
|
|
173
199
|
export type {
|
|
174
|
-
|
|
175
|
-
* @deprecated The type should not be used
|
|
176
|
-
*/
|
|
177
|
-
Event,
|
|
178
|
-
Event as EventListener,
|
|
200
|
+
EventListener,
|
|
179
201
|
TResponseData
|
|
180
202
|
};
|
|
181
203
|
export default API;
|