@sonoransoftware/sonoran.js 1.0.3 → 1.0.5
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.d.ts +56 -0
- package/dist/libs/rest/src/lib/REST.js +18 -1
- package/dist/libs/rest/src/lib/utils/constants.d.ts +23 -3
- package/dist/libs/rest/src/lib/utils/constants.js +12 -0
- package/dist/managers/CMSManager.d.ts +19 -0
- package/dist/managers/CMSManager.js +61 -6
- package/dist/managers/CMSServerManager.js +6 -0
- package/package.json +2 -2
- package/src/builders/cad/DispatchCall.ts +158 -158
- package/src/builders/index.ts +2 -2
- package/src/constants.ts +58 -0
- package/src/errors/LibraryErrors.ts +42 -42
- package/src/errors/Messages.ts +6 -6
- package/src/errors/index.ts +1 -1
- package/src/index.ts +3 -3
- package/src/instance/Instance.ts +117 -117
- package/src/instance/instance.types.ts +16 -16
- package/src/libs/rest/src/index.ts +5 -5
- package/src/libs/rest/src/lib/REST.ts +18 -1
- package/src/libs/rest/src/lib/RequestManager.ts +255 -255
- package/src/libs/rest/src/lib/errors/APIError.ts +14 -14
- package/src/libs/rest/src/lib/errors/HTTPError.ts +21 -21
- package/src/libs/rest/src/lib/errors/RateLimitError.ts +20 -20
- package/src/libs/rest/src/lib/errors/index.ts +3 -3
- package/src/libs/rest/src/lib/handlers/IHandler.ts +12 -12
- package/src/libs/rest/src/lib/handlers/SequentialHandler.ts +157 -157
- package/src/libs/rest/src/lib/utils/constants.ts +35 -2
- package/src/libs/rest/src/lib/utils/utils.ts +17 -17
- package/src/managers/BaseManager.ts +15 -15
- package/src/managers/CADActiveUnitsManager.ts +49 -49
- package/src/managers/CADManager.ts +58 -58
- package/src/managers/CADServerManager.ts +26 -26
- package/src/managers/CMSManager.ts +60 -11
- package/src/managers/CMSServerManager.ts +6 -0
- package/src/managers/CacheManager.ts +37 -37
- package/src/managers/DataManager.ts +63 -63
- package/src/structures/Base.ts +27 -27
- package/src/structures/CADActiveUnit.ts +84 -84
- package/src/structures/CADServer.ts +36 -36
- package/src/structures/CMSServer.ts +25 -25
- package/src/utils/utils.ts +74 -74
|
@@ -1,256 +1,256 @@
|
|
|
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.data;
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
case 'SET_API_ID': {
|
|
158
|
-
apiData.data.data = clonedData.data;
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
case 'NEW_RECORD': {
|
|
162
|
-
apiData.data.data = clonedData.data;
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
case 'EDIT_RECORD': {
|
|
166
|
-
apiData.data.data = clonedData.data;
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
case 'LOOKUP_INT': {
|
|
170
|
-
apiData.data.data = clonedData.data;
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
case 'LOOKUP': {
|
|
174
|
-
apiData.data.data = clonedData.data;
|
|
175
|
-
break;
|
|
176
|
-
}
|
|
177
|
-
case 'SET_ACCOUNT_PERMISSIONS': {
|
|
178
|
-
apiData.data.data = clonedData.data;
|
|
179
|
-
break;
|
|
180
|
-
}
|
|
181
|
-
case 'BAN_USER': {
|
|
182
|
-
apiData.data.data = clonedData.data;
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
case 'AUTH_STREETSIGNS': {
|
|
186
|
-
apiData.data.data = clonedData;
|
|
187
|
-
break;
|
|
188
|
-
}
|
|
189
|
-
case 'SET_POSTALS': {
|
|
190
|
-
apiData.data.data = clonedData.data;
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
case 'NEW_CHARACTER': {
|
|
194
|
-
apiData.data.data = clonedData.data;
|
|
195
|
-
break;
|
|
196
|
-
}
|
|
197
|
-
case 'EDIT_CHARACTER': {
|
|
198
|
-
apiData.data.data = clonedData.data;
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
case 'MODIFY_IDENTIFIER': {
|
|
202
|
-
apiData.data.data = clonedData.data;
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
case 'ADD_BLIP': {
|
|
206
|
-
apiData.data.data = clonedData.data;
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
case 'MODIFY_BLIP': {
|
|
210
|
-
apiData.data.data = clonedData.data;
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
case 'GET_CALLS': {
|
|
214
|
-
apiData.data.data = clonedData.data;
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
case 'GET_ACTIVE_UNITS': {
|
|
218
|
-
apiData.data.data = clonedData.data;
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
case 'NEW_DISPATCH': {
|
|
222
|
-
apiData.data.data = clonedData.data;
|
|
223
|
-
break;
|
|
224
|
-
}
|
|
225
|
-
case 'UNIT_LOCATION': {
|
|
226
|
-
apiData.data.data = clonedData.data;
|
|
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
|
-
};
|
|
253
|
-
|
|
254
|
-
return apiData;
|
|
255
|
-
}
|
|
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.data;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
case 'SET_API_ID': {
|
|
158
|
+
apiData.data.data = clonedData.data;
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case 'NEW_RECORD': {
|
|
162
|
+
apiData.data.data = clonedData.data;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case 'EDIT_RECORD': {
|
|
166
|
+
apiData.data.data = clonedData.data;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case 'LOOKUP_INT': {
|
|
170
|
+
apiData.data.data = clonedData.data;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case 'LOOKUP': {
|
|
174
|
+
apiData.data.data = clonedData.data;
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case 'SET_ACCOUNT_PERMISSIONS': {
|
|
178
|
+
apiData.data.data = clonedData.data;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
case 'BAN_USER': {
|
|
182
|
+
apiData.data.data = clonedData.data;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case 'AUTH_STREETSIGNS': {
|
|
186
|
+
apiData.data.data = clonedData;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'SET_POSTALS': {
|
|
190
|
+
apiData.data.data = clonedData.data;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case 'NEW_CHARACTER': {
|
|
194
|
+
apiData.data.data = clonedData.data;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case 'EDIT_CHARACTER': {
|
|
198
|
+
apiData.data.data = clonedData.data;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case 'MODIFY_IDENTIFIER': {
|
|
202
|
+
apiData.data.data = clonedData.data;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case 'ADD_BLIP': {
|
|
206
|
+
apiData.data.data = clonedData.data;
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
case 'MODIFY_BLIP': {
|
|
210
|
+
apiData.data.data = clonedData.data;
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case 'GET_CALLS': {
|
|
214
|
+
apiData.data.data = clonedData.data;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
case 'GET_ACTIVE_UNITS': {
|
|
218
|
+
apiData.data.data = clonedData.data;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case 'NEW_DISPATCH': {
|
|
222
|
+
apiData.data.data = clonedData.data;
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
case 'UNIT_LOCATION': {
|
|
226
|
+
apiData.data.data = clonedData.data;
|
|
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
|
+
};
|
|
253
|
+
|
|
254
|
+
return apiData;
|
|
255
|
+
}
|
|
256
256
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export class APIError extends Error {
|
|
2
|
-
public constructor(
|
|
3
|
-
public response: string,
|
|
4
|
-
public requestType: string,
|
|
5
|
-
public requestUrl: string,
|
|
6
|
-
public responseCode: number,
|
|
7
|
-
public requestData: any
|
|
8
|
-
) {
|
|
9
|
-
super(response);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
public override get name(): string {
|
|
13
|
-
return `Sonoran.js API Error - ${this.requestType} [${this.responseCode}]`;
|
|
14
|
-
}
|
|
1
|
+
export class APIError extends Error {
|
|
2
|
+
public constructor(
|
|
3
|
+
public response: string,
|
|
4
|
+
public requestType: string,
|
|
5
|
+
public requestUrl: string,
|
|
6
|
+
public responseCode: number,
|
|
7
|
+
public requestData: any
|
|
8
|
+
) {
|
|
9
|
+
super(response);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public override get name(): string {
|
|
13
|
+
return `Sonoran.js API Error - ${this.requestType} [${this.responseCode}]`;
|
|
14
|
+
}
|
|
15
15
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Represents a HTTP error
|
|
3
|
-
*/
|
|
4
|
-
export class HTTPError extends Error {
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @param message The error message
|
|
8
|
-
* @param name The name of the error
|
|
9
|
-
* @param status The status code of the response
|
|
10
|
-
* @param method The method of the request that erred
|
|
11
|
-
* @param url The url of the request that erred
|
|
12
|
-
*/
|
|
13
|
-
public constructor(
|
|
14
|
-
message: string,
|
|
15
|
-
public override name: string,
|
|
16
|
-
public status: number,
|
|
17
|
-
public method: string,
|
|
18
|
-
public url: string
|
|
19
|
-
) {
|
|
20
|
-
super(message);
|
|
21
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Represents a HTTP error
|
|
3
|
+
*/
|
|
4
|
+
export class HTTPError extends Error {
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @param message The error message
|
|
8
|
+
* @param name The name of the error
|
|
9
|
+
* @param status The status code of the response
|
|
10
|
+
* @param method The method of the request that erred
|
|
11
|
+
* @param url The url of the request that erred
|
|
12
|
+
*/
|
|
13
|
+
public constructor(
|
|
14
|
+
message: string,
|
|
15
|
+
public override name: string,
|
|
16
|
+
public status: number,
|
|
17
|
+
public method: string,
|
|
18
|
+
public url: string
|
|
19
|
+
) {
|
|
20
|
+
super(message);
|
|
21
|
+
}
|
|
22
22
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import type { RateLimitData } from '../REST';
|
|
2
|
-
import { productEnums } from '../../../../../constants';
|
|
3
|
-
|
|
4
|
-
export class RateLimitError extends Error implements RateLimitData {
|
|
5
|
-
public product: productEnums;
|
|
6
|
-
public type: string;
|
|
7
|
-
public timeTill: NodeJS.Timer;
|
|
8
|
-
public constructor({ product, type, timeTill }: RateLimitData) {
|
|
9
|
-
super();
|
|
10
|
-
this.product = product;
|
|
11
|
-
this.type = type;
|
|
12
|
-
this.timeTill = timeTill;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* The name of the error
|
|
17
|
-
*/
|
|
18
|
-
public override get name(): string {
|
|
19
|
-
return `Ratelimit Hit - [${this.product === productEnums.CAD ? 'Sonoran CAD' : this.product === productEnums.CMS ? 'Sonoran CMS' : 'Invalid Product' } '${this.type}']`;
|
|
20
|
-
}
|
|
1
|
+
import type { RateLimitData } from '../REST';
|
|
2
|
+
import { productEnums } from '../../../../../constants';
|
|
3
|
+
|
|
4
|
+
export class RateLimitError extends Error implements RateLimitData {
|
|
5
|
+
public product: productEnums;
|
|
6
|
+
public type: string;
|
|
7
|
+
public timeTill: NodeJS.Timer;
|
|
8
|
+
public constructor({ product, type, timeTill }: RateLimitData) {
|
|
9
|
+
super();
|
|
10
|
+
this.product = product;
|
|
11
|
+
this.type = type;
|
|
12
|
+
this.timeTill = timeTill;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The name of the error
|
|
17
|
+
*/
|
|
18
|
+
public override get name(): string {
|
|
19
|
+
return `Ratelimit Hit - [${this.product === productEnums.CAD ? 'Sonoran CAD' : this.product === productEnums.CMS ? 'Sonoran CMS' : 'Invalid Product' } '${this.type}']`;
|
|
20
|
+
}
|
|
21
21
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './APIError';
|
|
2
|
-
export * from './APIError';
|
|
3
|
-
export * from './HTTPError';
|
|
1
|
+
export * from './APIError';
|
|
2
|
+
export * from './APIError';
|
|
3
|
+
export * from './HTTPError';
|
|
4
4
|
export * from './RateLimitError';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { RequestInit } from 'node-fetch';
|
|
2
|
-
import type { APIData } from '../RequestManager';
|
|
3
|
-
|
|
4
|
-
export interface IHandler {
|
|
5
|
-
queueRequest: (
|
|
6
|
-
url: string,
|
|
7
|
-
options: RequestInit,
|
|
8
|
-
data: APIData,
|
|
9
|
-
) => Promise<unknown>;
|
|
10
|
-
// eslint-disable-next-line @typescript-eslint/method-signature-style -- This is meant to be a getter returning a bool
|
|
11
|
-
get inactive(): boolean;
|
|
12
|
-
readonly id: string;
|
|
1
|
+
import type { RequestInit } from 'node-fetch';
|
|
2
|
+
import type { APIData } from '../RequestManager';
|
|
3
|
+
|
|
4
|
+
export interface IHandler {
|
|
5
|
+
queueRequest: (
|
|
6
|
+
url: string,
|
|
7
|
+
options: RequestInit,
|
|
8
|
+
data: APIData,
|
|
9
|
+
) => Promise<unknown>;
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/method-signature-style -- This is meant to be a getter returning a bool
|
|
11
|
+
get inactive(): boolean;
|
|
12
|
+
readonly id: string;
|
|
13
13
|
}
|