@sonoransoftware/sonoran.js 1.0.19 → 1.0.22

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.
Files changed (89) hide show
  1. package/.eslintrc.js +10 -10
  2. package/.github/workflows/npm-publish.yml +34 -34
  3. package/.prettierrc.js +6 -6
  4. package/dist/builders/cad/DispatchCall.d.ts +92 -92
  5. package/dist/builders/cad/DispatchCall.js +144 -144
  6. package/dist/builders/cad/index.d.ts +1 -1
  7. package/dist/builders/cad/index.js +17 -17
  8. package/dist/builders/index.d.ts +1 -1
  9. package/dist/builders/index.js +19 -19
  10. package/dist/constants.d.ts +230 -230
  11. package/dist/constants.js +27 -27
  12. package/dist/errors/LibraryErrors.d.ts +19 -19
  13. package/dist/errors/LibraryErrors.js +47 -47
  14. package/dist/errors/Messages.d.ts +1 -1
  15. package/dist/errors/Messages.js +8 -8
  16. package/dist/errors/index.d.ts +2 -2
  17. package/dist/errors/index.js +18 -18
  18. package/dist/index.d.ts +4 -4
  19. package/dist/index.js +24 -24
  20. package/dist/instance/Instance.d.ts +24 -24
  21. package/dist/instance/Instance.js +139 -139
  22. package/dist/instance/instance.types.d.ts +17 -17
  23. package/dist/instance/instance.types.js +2 -2
  24. package/dist/libs/rest/src/index.d.ts +6 -6
  25. package/dist/libs/rest/src/index.js +22 -22
  26. package/dist/libs/rest/src/lib/REST.d.ts +101 -101
  27. package/dist/libs/rest/src/lib/REST.js +136 -129
  28. package/dist/libs/rest/src/lib/RequestManager.d.ts +59 -59
  29. package/dist/libs/rest/src/lib/RequestManager.js +191 -191
  30. package/dist/libs/rest/src/lib/errors/APIError.d.ts +9 -9
  31. package/dist/libs/rest/src/lib/errors/APIError.js +17 -17
  32. package/dist/libs/rest/src/lib/errors/HTTPError.d.ts +17 -17
  33. package/dist/libs/rest/src/lib/errors/HTTPError.js +23 -23
  34. package/dist/libs/rest/src/lib/errors/RateLimitError.d.ts +13 -13
  35. package/dist/libs/rest/src/lib/errors/RateLimitError.js +19 -19
  36. package/dist/libs/rest/src/lib/errors/index.d.ts +4 -4
  37. package/dist/libs/rest/src/lib/errors/index.js +20 -20
  38. package/dist/libs/rest/src/lib/handlers/IHandler.d.ts +7 -7
  39. package/dist/libs/rest/src/lib/handlers/IHandler.js +2 -2
  40. package/dist/libs/rest/src/lib/handlers/SequentialHandler.d.ts +45 -45
  41. package/dist/libs/rest/src/lib/handlers/SequentialHandler.js +143 -143
  42. package/dist/libs/rest/src/lib/utils/constants.d.ts +533 -527
  43. package/dist/libs/rest/src/lib/utils/constants.js +463 -455
  44. package/dist/libs/rest/src/lib/utils/utils.d.ts +1 -1
  45. package/dist/libs/rest/src/lib/utils/utils.js +22 -22
  46. package/dist/managers/BaseManager.d.ts +14 -14
  47. package/dist/managers/BaseManager.js +18 -18
  48. package/dist/managers/CADActiveUnitsManager.d.ts +15 -15
  49. package/dist/managers/CADActiveUnitsManager.js +38 -38
  50. package/dist/managers/CADManager.d.ts +29 -29
  51. package/dist/managers/CADManager.js +86 -86
  52. package/dist/managers/CADServerManager.d.ts +8 -8
  53. package/dist/managers/CADServerManager.js +28 -28
  54. package/dist/managers/CMSManager.d.ts +101 -101
  55. package/dist/managers/CMSManager.js +266 -266
  56. package/dist/managers/CMSServerManager.d.ts +8 -8
  57. package/dist/managers/CMSServerManager.js +34 -34
  58. package/dist/managers/CacheManager.d.ts +10 -10
  59. package/dist/managers/CacheManager.js +36 -36
  60. package/dist/managers/DataManager.d.ts +31 -31
  61. package/dist/managers/DataManager.js +58 -58
  62. package/dist/structures/Base.d.ts +9 -9
  63. package/dist/structures/Base.js +24 -24
  64. package/dist/structures/CADActiveUnit.d.ts +47 -47
  65. package/dist/structures/CADActiveUnit.js +66 -66
  66. package/dist/structures/CADServer.d.ts +26 -26
  67. package/dist/structures/CADServer.js +15 -15
  68. package/dist/structures/CMSServer.d.ts +18 -18
  69. package/dist/structures/CMSServer.js +12 -12
  70. package/dist/utils/index.d.ts +1 -1
  71. package/dist/utils/index.js +17 -17
  72. package/dist/utils/utils.d.ts +13 -13
  73. package/dist/utils/utils.js +79 -79
  74. package/docs/CAD-Methods-and-Usage.md +58 -58
  75. package/docs/CMS-Methods-and-Usage.md +211 -211
  76. package/docs/REST-Methods-and-Usage.md +46 -46
  77. package/package.json +48 -48
  78. package/readme.md +53 -53
  79. package/src/constants.ts +248 -248
  80. package/src/instance/Instance.ts +121 -121
  81. package/src/instance/instance.types.ts +17 -17
  82. package/src/libs/rest/src/lib/REST.ts +241 -234
  83. package/src/libs/rest/src/lib/RequestManager.ts +260 -260
  84. package/src/libs/rest/src/lib/handlers/SequentialHandler.ts +160 -160
  85. package/src/libs/rest/src/lib/utils/constants.ts +1012 -997
  86. package/src/managers/CADManager.ts +63 -63
  87. package/src/managers/CMSManager.ts +226 -226
  88. package/src/managers/CMSServerManager.ts +32 -32
  89. 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
  }