@sonoransoftware/sonoran.js 1.0.19 → 1.0.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/.eslintrc.js +10 -10
- package/.github/workflows/npm-publish.yml +34 -34
- package/.prettierrc.js +6 -6
- package/dist/builders/cad/DispatchCall.d.ts +92 -92
- package/dist/builders/cad/DispatchCall.js +144 -144
- package/dist/builders/cad/index.d.ts +1 -1
- package/dist/builders/cad/index.js +17 -17
- package/dist/builders/index.d.ts +1 -1
- package/dist/builders/index.js +19 -19
- package/dist/constants.d.ts +230 -230
- package/dist/constants.js +27 -27
- package/dist/errors/LibraryErrors.d.ts +19 -19
- package/dist/errors/LibraryErrors.js +47 -47
- package/dist/errors/Messages.d.ts +1 -1
- package/dist/errors/Messages.js +8 -8
- package/dist/errors/index.d.ts +2 -2
- package/dist/errors/index.js +18 -18
- package/dist/index.d.ts +4 -4
- package/dist/index.js +24 -24
- package/dist/instance/Instance.d.ts +24 -24
- package/dist/instance/Instance.js +139 -139
- package/dist/instance/instance.types.d.ts +17 -17
- package/dist/instance/instance.types.js +2 -2
- package/dist/libs/rest/src/index.d.ts +6 -6
- package/dist/libs/rest/src/index.js +22 -22
- package/dist/libs/rest/src/lib/REST.d.ts +101 -101
- package/dist/libs/rest/src/lib/REST.js +136 -129
- package/dist/libs/rest/src/lib/RequestManager.d.ts +59 -59
- package/dist/libs/rest/src/lib/RequestManager.js +191 -191
- package/dist/libs/rest/src/lib/errors/APIError.d.ts +9 -9
- package/dist/libs/rest/src/lib/errors/APIError.js +17 -17
- package/dist/libs/rest/src/lib/errors/HTTPError.d.ts +17 -17
- package/dist/libs/rest/src/lib/errors/HTTPError.js +23 -23
- package/dist/libs/rest/src/lib/errors/RateLimitError.d.ts +13 -13
- package/dist/libs/rest/src/lib/errors/RateLimitError.js +19 -19
- package/dist/libs/rest/src/lib/errors/index.d.ts +4 -4
- package/dist/libs/rest/src/lib/errors/index.js +20 -20
- package/dist/libs/rest/src/lib/handlers/IHandler.d.ts +7 -7
- package/dist/libs/rest/src/lib/handlers/IHandler.js +2 -2
- package/dist/libs/rest/src/lib/handlers/SequentialHandler.d.ts +45 -45
- package/dist/libs/rest/src/lib/handlers/SequentialHandler.js +143 -143
- package/dist/libs/rest/src/lib/utils/constants.d.ts +533 -527
- package/dist/libs/rest/src/lib/utils/constants.js +463 -455
- package/dist/libs/rest/src/lib/utils/utils.d.ts +1 -1
- package/dist/libs/rest/src/lib/utils/utils.js +22 -22
- package/dist/managers/BaseManager.d.ts +14 -14
- package/dist/managers/BaseManager.js +18 -18
- package/dist/managers/CADActiveUnitsManager.d.ts +15 -15
- package/dist/managers/CADActiveUnitsManager.js +38 -38
- package/dist/managers/CADManager.d.ts +29 -29
- package/dist/managers/CADManager.js +86 -86
- package/dist/managers/CADServerManager.d.ts +8 -8
- package/dist/managers/CADServerManager.js +28 -28
- package/dist/managers/CMSManager.d.ts +101 -101
- package/dist/managers/CMSManager.js +266 -266
- package/dist/managers/CMSServerManager.d.ts +8 -8
- package/dist/managers/CMSServerManager.js +34 -34
- package/dist/managers/CacheManager.d.ts +10 -10
- package/dist/managers/CacheManager.js +36 -36
- package/dist/managers/DataManager.d.ts +31 -31
- package/dist/managers/DataManager.js +58 -58
- package/dist/structures/Base.d.ts +9 -9
- package/dist/structures/Base.js +24 -24
- package/dist/structures/CADActiveUnit.d.ts +47 -47
- package/dist/structures/CADActiveUnit.js +66 -66
- package/dist/structures/CADServer.d.ts +26 -26
- package/dist/structures/CADServer.js +15 -15
- package/dist/structures/CMSServer.d.ts +18 -18
- package/dist/structures/CMSServer.js +12 -12
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +17 -17
- package/dist/utils/utils.d.ts +13 -13
- package/dist/utils/utils.js +79 -79
- package/docs/CAD-Methods-and-Usage.md +58 -58
- package/docs/CMS-Methods-and-Usage.md +211 -211
- package/docs/REST-Methods-and-Usage.md +46 -46
- package/package.json +48 -48
- package/readme.md +53 -53
- package/src/constants.ts +248 -248
- package/src/instance/Instance.ts +121 -121
- package/src/instance/instance.types.ts +17 -17
- package/src/libs/rest/src/lib/REST.ts +241 -234
- package/src/libs/rest/src/lib/RequestManager.ts +260 -260
- package/src/libs/rest/src/lib/handlers/SequentialHandler.ts +160 -160
- package/src/libs/rest/src/lib/utils/constants.ts +1012 -997
- package/src/managers/CADManager.ts +63 -63
- package/src/managers/CMSManager.ts +226 -226
- package/src/managers/CMSServerManager.ts +32 -32
- package/tsconfig.json +71 -71
|
@@ -1,261 +1,261 @@
|
|
|
1
|
-
import { Collection } from '@discordjs/collection';
|
|
2
|
-
// import { DiscordSnowflake } from '@sapphire/snowflake';
|
|
3
|
-
import { EventEmitter } from 'events';
|
|
4
|
-
// import type { RequestInit, BodyInit } from 'node-fetch';
|
|
5
|
-
|
|
6
|
-
import type { Instance } from '../../../../instance/Instance';
|
|
7
|
-
import { RESTOptions, RateLimitData, RestEvents } from './REST';
|
|
8
|
-
import { DefaultCADRestOptions, DefaultCMSRestOptions, AllAPITypes/**, RESTTypedAPIDataStructs, PossibleRequestData*/ } from './utils/constants';
|
|
9
|
-
import { productEnums } from '../../../../constants';
|
|
10
|
-
// import { APIError, HTTPError } from './errors';
|
|
11
|
-
import { IHandler } from './handlers/IHandler';
|
|
12
|
-
import { SequentialHandler } from './handlers/SequentialHandler';
|
|
13
|
-
import { cloneObject } from '../../../../utils/utils';
|
|
14
|
-
|
|
15
|
-
export type RouteLike = `/${string}`;
|
|
16
|
-
|
|
17
|
-
export const enum RequestMethod {
|
|
18
|
-
Delete = 'delete',
|
|
19
|
-
Get = 'get',
|
|
20
|
-
Patch = 'patch',
|
|
21
|
-
Post = 'post',
|
|
22
|
-
Put = 'put',
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export type ReqDataType = Array<unknown> | unknown;
|
|
26
|
-
|
|
27
|
-
export interface RequestData {
|
|
28
|
-
id: string;
|
|
29
|
-
key: string;
|
|
30
|
-
type: string;
|
|
31
|
-
data: any;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface InternalRequestData extends RequestData {
|
|
35
|
-
product: productEnums;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface RequestHeaders {
|
|
39
|
-
'User-Agent': string;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface APIData {
|
|
43
|
-
requestTypeId: string;
|
|
44
|
-
typePath: string;
|
|
45
|
-
fullUrl: string;
|
|
46
|
-
method: string;
|
|
47
|
-
fetchOptions: RequestInit;
|
|
48
|
-
data: RequestData;
|
|
49
|
-
product: productEnums;
|
|
50
|
-
type: string;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface RequestManager {
|
|
54
|
-
on: (<K extends keyof RestEvents>(event: K, listener: (...args: RestEvents[K]) => void) => this) &
|
|
55
|
-
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, listener: (...args: any[]) => void) => this);
|
|
56
|
-
|
|
57
|
-
once: (<K extends keyof RestEvents>(event: K, listener: (...args: RestEvents[K]) => void) => this) &
|
|
58
|
-
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, listener: (...args: any[]) => void) => this);
|
|
59
|
-
|
|
60
|
-
emit: (<K extends keyof RestEvents>(event: K, ...args: RestEvents[K]) => boolean) &
|
|
61
|
-
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, ...args: any[]) => boolean);
|
|
62
|
-
|
|
63
|
-
off: (<K extends keyof RestEvents>(event: K, listener: (...args: RestEvents[K]) => void) => this) &
|
|
64
|
-
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, listener: (...args: any[]) => void) => this);
|
|
65
|
-
|
|
66
|
-
removeAllListeners: (<K extends keyof RestEvents>(event?: K) => this) &
|
|
67
|
-
(<S extends string | symbol>(event?: Exclude<S, keyof RestEvents>) => this);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export class RequestManager extends EventEmitter {
|
|
71
|
-
public readonly ratelimitedTypes = new Collection<string, RateLimitData>();
|
|
72
|
-
public readonly handlers = new Collection<string, IHandler>();
|
|
73
|
-
public readonly product: productEnums;
|
|
74
|
-
public readonly options: RESTOptions;
|
|
75
|
-
private instance: Instance;
|
|
76
|
-
|
|
77
|
-
constructor(_instance: Instance, _product: productEnums, options: RESTOptions) {
|
|
78
|
-
super();
|
|
79
|
-
this.product = _product;
|
|
80
|
-
this.instance = _instance;
|
|
81
|
-
switch (_product) {
|
|
82
|
-
case productEnums.CAD: {
|
|
83
|
-
this.options = { ...DefaultCADRestOptions, ...options };
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
case productEnums.CMS: {
|
|
87
|
-
this.options = { ...DefaultCMSRestOptions, ...options };
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
default: {
|
|
91
|
-
throw new Error('No Product provided for RequestManager initialization');
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public async queueRequest(request: InternalRequestData): Promise<unknown> {
|
|
97
|
-
let requestData = request as RequestData;
|
|
98
|
-
const resolvedData: APIData = RequestManager.resolveRequestData(this.instance, request.type, request.product, requestData);
|
|
99
|
-
const handler = this.handlers.get(`${resolvedData.typePath}:${String(request.product)}`) ?? this.createHandler(resolvedData);
|
|
100
|
-
return handler.queueRequest(resolvedData.fullUrl, resolvedData.fetchOptions as any, resolvedData);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
public onRateLimit(id: string, rateLimitData: RateLimitData): void {
|
|
104
|
-
this.ratelimitedTypes.set(id, rateLimitData);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
public removeRateLimit(id: string): void {
|
|
108
|
-
this.ratelimitedTypes.delete(id);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
private createHandler(data: APIData) {
|
|
112
|
-
const queue = new SequentialHandler(this, data);
|
|
113
|
-
this.handlers.set(queue.id, queue);
|
|
114
|
-
return queue;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
private static resolveRequestData(instance: Instance, type: string, product: productEnums, data: RequestData): APIData {
|
|
118
|
-
let apiURL: string | boolean = false;
|
|
119
|
-
let apiData: APIData = {
|
|
120
|
-
requestTypeId: `${type}:${String(product)}`,
|
|
121
|
-
typePath: '',
|
|
122
|
-
fullUrl: '',
|
|
123
|
-
method: '',
|
|
124
|
-
fetchOptions: {},
|
|
125
|
-
data,
|
|
126
|
-
product,
|
|
127
|
-
type
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
switch (product) {
|
|
131
|
-
case productEnums.CAD:
|
|
132
|
-
apiURL = instance.cadApiUrl;
|
|
133
|
-
break;
|
|
134
|
-
case productEnums.CMS:
|
|
135
|
-
apiURL = instance.cmsApiUrl;
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const findType = AllAPITypes.find((_type) => _type.type === type);
|
|
140
|
-
if (findType) {
|
|
141
|
-
apiData.fullUrl = `${apiURL}/${findType.path}`;
|
|
142
|
-
apiData.method = findType.method;
|
|
143
|
-
apiData.fetchOptions.method = findType.method;
|
|
144
|
-
apiData.typePath = findType.path;
|
|
145
|
-
|
|
146
|
-
const clonedData = cloneObject(data.data);
|
|
147
|
-
|
|
148
|
-
switch (findType.type) {
|
|
149
|
-
case 'SET_SERVERS': {
|
|
150
|
-
apiData.data.data = clonedData;
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
case 'SET_PENAL_CODES': {
|
|
154
|
-
apiData.data.data = [clonedData[0]];
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
case 'SET_API_ID': {
|
|
158
|
-
apiData.data.data = [clonedData[0]];
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
case 'NEW_RECORD': {
|
|
162
|
-
apiData.data.data = [clonedData[0]];
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
case 'EDIT_RECORD': {
|
|
166
|
-
apiData.data.data = [clonedData[0]];
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
case 'LOOKUP_INT': {
|
|
170
|
-
apiData.data.data = [clonedData[0]];
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
case 'LOOKUP': {
|
|
174
|
-
apiData.data.data = [clonedData[0]];
|
|
175
|
-
break;
|
|
176
|
-
}
|
|
177
|
-
case 'SET_ACCOUNT_PERMISSIONS': {
|
|
178
|
-
apiData.data.data = [clonedData[0]];
|
|
179
|
-
break;
|
|
180
|
-
}
|
|
181
|
-
case 'BAN_USER': {
|
|
182
|
-
apiData.data.data = [clonedData[0]];
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
case 'AUTH_STREETSIGNS': {
|
|
186
|
-
apiData.data.data = clonedData;
|
|
187
|
-
break;
|
|
188
|
-
}
|
|
189
|
-
case 'SET_POSTALS': {
|
|
190
|
-
apiData.data.data = [clonedData[0]];
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
case 'NEW_CHARACTER': {
|
|
194
|
-
apiData.data.data = [clonedData[0]];
|
|
195
|
-
break;
|
|
196
|
-
}
|
|
197
|
-
case 'EDIT_CHARACTER': {
|
|
198
|
-
apiData.data.data = [clonedData[0]];
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
case 'MODIFY_IDENTIFIER': {
|
|
202
|
-
apiData.data.data = [clonedData[0]];
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
case 'ADD_BLIP': {
|
|
206
|
-
apiData.data.data = [clonedData[0]];
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
case 'MODIFY_BLIP': {
|
|
210
|
-
apiData.data.data = [clonedData[0]];
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
case 'GET_CALLS': {
|
|
214
|
-
apiData.data.data = [clonedData[0]];
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
case 'GET_ACTIVE_UNITS': {
|
|
218
|
-
apiData.data.data = [clonedData[0]];
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
case 'NEW_DISPATCH': {
|
|
222
|
-
apiData.data.data = [clonedData[0]];
|
|
223
|
-
break;
|
|
224
|
-
}
|
|
225
|
-
case 'UNIT_LOCATION': {
|
|
226
|
-
apiData.data.data = [clonedData[0]];
|
|
227
|
-
break;
|
|
228
|
-
}
|
|
229
|
-
default: {
|
|
230
|
-
if (data.data) {
|
|
231
|
-
if (Array.isArray(data.data)) {
|
|
232
|
-
if (data.data.length > 0) {
|
|
233
|
-
apiData.data.data = [ clonedData ];
|
|
234
|
-
} else {
|
|
235
|
-
apiData.data.data = [];
|
|
236
|
-
}
|
|
237
|
-
} else {
|
|
238
|
-
apiData.data.data = [ clonedData ];
|
|
239
|
-
}
|
|
240
|
-
} else {
|
|
241
|
-
apiData.data.data = [];
|
|
242
|
-
}
|
|
243
|
-
break;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
apiData.fetchOptions.body = JSON.stringify(apiData.data);
|
|
249
|
-
apiData.fetchOptions.headers = {
|
|
250
|
-
'Accept': 'application/json',
|
|
251
|
-
'Content-Type': 'application/json',
|
|
252
|
-
...instance.apiHeaders
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
return apiData;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
debug(log: string) {
|
|
259
|
-
return this.instance._debugLog(log);
|
|
260
|
-
}
|
|
1
|
+
import { Collection } from '@discordjs/collection';
|
|
2
|
+
// import { DiscordSnowflake } from '@sapphire/snowflake';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
// import type { RequestInit, BodyInit } from 'node-fetch';
|
|
5
|
+
|
|
6
|
+
import type { Instance } from '../../../../instance/Instance';
|
|
7
|
+
import { RESTOptions, RateLimitData, RestEvents } from './REST';
|
|
8
|
+
import { DefaultCADRestOptions, DefaultCMSRestOptions, AllAPITypes/**, RESTTypedAPIDataStructs, PossibleRequestData*/ } from './utils/constants';
|
|
9
|
+
import { productEnums } from '../../../../constants';
|
|
10
|
+
// import { APIError, HTTPError } from './errors';
|
|
11
|
+
import { IHandler } from './handlers/IHandler';
|
|
12
|
+
import { SequentialHandler } from './handlers/SequentialHandler';
|
|
13
|
+
import { cloneObject } from '../../../../utils/utils';
|
|
14
|
+
|
|
15
|
+
export type RouteLike = `/${string}`;
|
|
16
|
+
|
|
17
|
+
export const enum RequestMethod {
|
|
18
|
+
Delete = 'delete',
|
|
19
|
+
Get = 'get',
|
|
20
|
+
Patch = 'patch',
|
|
21
|
+
Post = 'post',
|
|
22
|
+
Put = 'put',
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type ReqDataType = Array<unknown> | unknown;
|
|
26
|
+
|
|
27
|
+
export interface RequestData {
|
|
28
|
+
id: string;
|
|
29
|
+
key: string;
|
|
30
|
+
type: string;
|
|
31
|
+
data: any;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface InternalRequestData extends RequestData {
|
|
35
|
+
product: productEnums;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface RequestHeaders {
|
|
39
|
+
'User-Agent': string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface APIData {
|
|
43
|
+
requestTypeId: string;
|
|
44
|
+
typePath: string;
|
|
45
|
+
fullUrl: string;
|
|
46
|
+
method: string;
|
|
47
|
+
fetchOptions: RequestInit;
|
|
48
|
+
data: RequestData;
|
|
49
|
+
product: productEnums;
|
|
50
|
+
type: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface RequestManager {
|
|
54
|
+
on: (<K extends keyof RestEvents>(event: K, listener: (...args: RestEvents[K]) => void) => this) &
|
|
55
|
+
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, listener: (...args: any[]) => void) => this);
|
|
56
|
+
|
|
57
|
+
once: (<K extends keyof RestEvents>(event: K, listener: (...args: RestEvents[K]) => void) => this) &
|
|
58
|
+
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, listener: (...args: any[]) => void) => this);
|
|
59
|
+
|
|
60
|
+
emit: (<K extends keyof RestEvents>(event: K, ...args: RestEvents[K]) => boolean) &
|
|
61
|
+
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, ...args: any[]) => boolean);
|
|
62
|
+
|
|
63
|
+
off: (<K extends keyof RestEvents>(event: K, listener: (...args: RestEvents[K]) => void) => this) &
|
|
64
|
+
(<S extends string | symbol>(event: Exclude<S, keyof RestEvents>, listener: (...args: any[]) => void) => this);
|
|
65
|
+
|
|
66
|
+
removeAllListeners: (<K extends keyof RestEvents>(event?: K) => this) &
|
|
67
|
+
(<S extends string | symbol>(event?: Exclude<S, keyof RestEvents>) => this);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export class RequestManager extends EventEmitter {
|
|
71
|
+
public readonly ratelimitedTypes = new Collection<string, RateLimitData>();
|
|
72
|
+
public readonly handlers = new Collection<string, IHandler>();
|
|
73
|
+
public readonly product: productEnums;
|
|
74
|
+
public readonly options: RESTOptions;
|
|
75
|
+
private instance: Instance;
|
|
76
|
+
|
|
77
|
+
constructor(_instance: Instance, _product: productEnums, options: RESTOptions) {
|
|
78
|
+
super();
|
|
79
|
+
this.product = _product;
|
|
80
|
+
this.instance = _instance;
|
|
81
|
+
switch (_product) {
|
|
82
|
+
case productEnums.CAD: {
|
|
83
|
+
this.options = { ...DefaultCADRestOptions, ...options };
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case productEnums.CMS: {
|
|
87
|
+
this.options = { ...DefaultCMSRestOptions, ...options };
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
default: {
|
|
91
|
+
throw new Error('No Product provided for RequestManager initialization');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public async queueRequest(request: InternalRequestData): Promise<unknown> {
|
|
97
|
+
let requestData = request as RequestData;
|
|
98
|
+
const resolvedData: APIData = RequestManager.resolveRequestData(this.instance, request.type, request.product, requestData);
|
|
99
|
+
const handler = this.handlers.get(`${resolvedData.typePath}:${String(request.product)}`) ?? this.createHandler(resolvedData);
|
|
100
|
+
return handler.queueRequest(resolvedData.fullUrl, resolvedData.fetchOptions as any, resolvedData);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public onRateLimit(id: string, rateLimitData: RateLimitData): void {
|
|
104
|
+
this.ratelimitedTypes.set(id, rateLimitData);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public removeRateLimit(id: string): void {
|
|
108
|
+
this.ratelimitedTypes.delete(id);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private createHandler(data: APIData) {
|
|
112
|
+
const queue = new SequentialHandler(this, data);
|
|
113
|
+
this.handlers.set(queue.id, queue);
|
|
114
|
+
return queue;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private static resolveRequestData(instance: Instance, type: string, product: productEnums, data: RequestData): APIData {
|
|
118
|
+
let apiURL: string | boolean = false;
|
|
119
|
+
let apiData: APIData = {
|
|
120
|
+
requestTypeId: `${type}:${String(product)}`,
|
|
121
|
+
typePath: '',
|
|
122
|
+
fullUrl: '',
|
|
123
|
+
method: '',
|
|
124
|
+
fetchOptions: {},
|
|
125
|
+
data,
|
|
126
|
+
product,
|
|
127
|
+
type
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
switch (product) {
|
|
131
|
+
case productEnums.CAD:
|
|
132
|
+
apiURL = instance.cadApiUrl;
|
|
133
|
+
break;
|
|
134
|
+
case productEnums.CMS:
|
|
135
|
+
apiURL = instance.cmsApiUrl;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const findType = AllAPITypes.find((_type) => _type.type === type);
|
|
140
|
+
if (findType) {
|
|
141
|
+
apiData.fullUrl = `${apiURL}/${findType.path}`;
|
|
142
|
+
apiData.method = findType.method;
|
|
143
|
+
apiData.fetchOptions.method = findType.method;
|
|
144
|
+
apiData.typePath = findType.path;
|
|
145
|
+
|
|
146
|
+
const clonedData = cloneObject(data.data);
|
|
147
|
+
|
|
148
|
+
switch (findType.type) {
|
|
149
|
+
case 'SET_SERVERS': {
|
|
150
|
+
apiData.data.data = clonedData;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
case 'SET_PENAL_CODES': {
|
|
154
|
+
apiData.data.data = [clonedData[0]];
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
case 'SET_API_ID': {
|
|
158
|
+
apiData.data.data = [clonedData[0]];
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case 'NEW_RECORD': {
|
|
162
|
+
apiData.data.data = [clonedData[0]];
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case 'EDIT_RECORD': {
|
|
166
|
+
apiData.data.data = [clonedData[0]];
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case 'LOOKUP_INT': {
|
|
170
|
+
apiData.data.data = [clonedData[0]];
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case 'LOOKUP': {
|
|
174
|
+
apiData.data.data = [clonedData[0]];
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case 'SET_ACCOUNT_PERMISSIONS': {
|
|
178
|
+
apiData.data.data = [clonedData[0]];
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
case 'BAN_USER': {
|
|
182
|
+
apiData.data.data = [clonedData[0]];
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case 'AUTH_STREETSIGNS': {
|
|
186
|
+
apiData.data.data = clonedData;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'SET_POSTALS': {
|
|
190
|
+
apiData.data.data = [clonedData[0]];
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case 'NEW_CHARACTER': {
|
|
194
|
+
apiData.data.data = [clonedData[0]];
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case 'EDIT_CHARACTER': {
|
|
198
|
+
apiData.data.data = [clonedData[0]];
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case 'MODIFY_IDENTIFIER': {
|
|
202
|
+
apiData.data.data = [clonedData[0]];
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case 'ADD_BLIP': {
|
|
206
|
+
apiData.data.data = [clonedData[0]];
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
case 'MODIFY_BLIP': {
|
|
210
|
+
apiData.data.data = [clonedData[0]];
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case 'GET_CALLS': {
|
|
214
|
+
apiData.data.data = [clonedData[0]];
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
case 'GET_ACTIVE_UNITS': {
|
|
218
|
+
apiData.data.data = [clonedData[0]];
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case 'NEW_DISPATCH': {
|
|
222
|
+
apiData.data.data = [clonedData[0]];
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
case 'UNIT_LOCATION': {
|
|
226
|
+
apiData.data.data = [clonedData[0]];
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
default: {
|
|
230
|
+
if (data.data) {
|
|
231
|
+
if (Array.isArray(data.data)) {
|
|
232
|
+
if (data.data.length > 0) {
|
|
233
|
+
apiData.data.data = [ clonedData ];
|
|
234
|
+
} else {
|
|
235
|
+
apiData.data.data = [];
|
|
236
|
+
}
|
|
237
|
+
} else {
|
|
238
|
+
apiData.data.data = [ clonedData ];
|
|
239
|
+
}
|
|
240
|
+
} else {
|
|
241
|
+
apiData.data.data = [];
|
|
242
|
+
}
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
apiData.fetchOptions.body = JSON.stringify(apiData.data);
|
|
249
|
+
apiData.fetchOptions.headers = {
|
|
250
|
+
'Accept': 'application/json',
|
|
251
|
+
'Content-Type': 'application/json',
|
|
252
|
+
...instance.apiHeaders
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
return apiData;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
debug(log: string) {
|
|
259
|
+
return this.instance._debugLog(log);
|
|
260
|
+
}
|
|
261
261
|
}
|