erlc-api 1.3.12 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +126 -110
- package/dist/browser/erlc.min.js +1 -0
- package/dist/cjs/client.d.ts +25 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +152 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/errors/index.d.ts +13 -0
- package/dist/cjs/errors/index.d.ts.map +1 -0
- package/dist/cjs/errors/index.js +32 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types/index.d.ts +46 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/esm/client.d.ts +25 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +145 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/errors/index.d.ts +13 -0
- package/dist/esm/errors/index.d.ts.map +1 -0
- package/dist/esm/errors/index.js +25 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types/index.d.ts +46 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/types/client.d.ts +25 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +13 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +46 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/package.json +65 -33
- package/.gitattributes +0 -2
- package/index.js +0 -1
- package/src/classes/client.js +0 -36
- package/src/constants.js +0 -2
- package/src/erlc.js +0 -14
- package/src/functions/assert.js +0 -5
- package/src/functions/server/getBans.js +0 -28
- package/src/functions/server/getCommandLogs.js +0 -28
- package/src/functions/server/getJoinLogs.js +0 -28
- package/src/functions/server/getKillLogs.js +0 -28
- package/src/functions/server/getModcallLogs.js +0 -28
- package/src/functions/server/getPlayers.js +0 -28
- package/src/functions/server/getQueue.js +0 -28
- package/src/functions/server/getServer.js +0 -52
- package/src/functions/server/getVehicles.js +0 -28
- package/src/functions/server/runCommand.js +0 -29
- package/src/types/custom.d.ts +0 -5
- package/src/types/index.d.ts +0 -91
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2023 0Adexus0
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 0Adexus0
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,110 +1,126 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
A
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
1
|
+
# ERLC API
|
|
2
|
+
|
|
3
|
+
A modern TypeScript/JavaScript API wrapper for ER:LC (Emergency Response: Liberty County) with full browser support.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🚀 Full TypeScript support
|
|
8
|
+
- 🌐 Browser compatible
|
|
9
|
+
- ⚡ Promise-based API
|
|
10
|
+
- 🛡️ Comprehensive error handling
|
|
11
|
+
- 📘 Type definitions included
|
|
12
|
+
- 🔄 CommonJS and ES Module support
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install erlc-api
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
### TypeScript/ES Modules
|
|
23
|
+
```typescript
|
|
24
|
+
import { Client } from 'erlc-api';
|
|
25
|
+
|
|
26
|
+
const client = new Client({
|
|
27
|
+
globalToken: 'your-global-token'
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Get server information
|
|
31
|
+
const serverInfo = await client.getServer('server-token');
|
|
32
|
+
console.log(serverInfo);
|
|
33
|
+
|
|
34
|
+
// Get players
|
|
35
|
+
const players = await client.getPlayers('server-token');
|
|
36
|
+
console.log(players);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### CommonJS
|
|
40
|
+
```javascript
|
|
41
|
+
const { Client } = require('erlc-api');
|
|
42
|
+
|
|
43
|
+
const client = new Client({
|
|
44
|
+
globalToken: 'your-global-token'
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Using async/await
|
|
48
|
+
async function getServerInfo() {
|
|
49
|
+
try {
|
|
50
|
+
const server = await client.getServer('server-token');
|
|
51
|
+
console.log(server);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error('Error:', error.message);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Browser
|
|
59
|
+
```html
|
|
60
|
+
<script src="node_modules/erlc-api/dist/browser/erlc.min.js"></script>
|
|
61
|
+
<script>
|
|
62
|
+
const client = new ERLC.Client({
|
|
63
|
+
globalToken: 'your-global-token'
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
client.getServer('server-token')
|
|
67
|
+
.then(server => console.log(server))
|
|
68
|
+
.catch(error => console.error(error));
|
|
69
|
+
</script>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## API Methods
|
|
73
|
+
|
|
74
|
+
- `getServer(serverToken)` - Get server information
|
|
75
|
+
- `getPlayers(serverToken)` - Get list of players
|
|
76
|
+
- `getJoinLogs(serverToken)` - Get join/leave logs
|
|
77
|
+
- `getKillLogs(serverToken)` - Get kill logs
|
|
78
|
+
- `getCommandLogs(serverToken)` - Get command logs
|
|
79
|
+
- `getModcallLogs(serverToken)` - Get modcall logs
|
|
80
|
+
- `getBans(serverToken)` - Get server bans
|
|
81
|
+
- `getVehicles(serverToken)` - Get vehicle information
|
|
82
|
+
- `getQueue(serverToken)` - Get queue information
|
|
83
|
+
- `runCommand(serverToken, command)` - Run a server command
|
|
84
|
+
|
|
85
|
+
## Error Handling
|
|
86
|
+
|
|
87
|
+
The library includes custom error classes for better error handling:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { AuthenticationError, ValidationError, NetworkError } from 'erlc-api';
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
await client.getServer('server-token');
|
|
94
|
+
} catch (error) {
|
|
95
|
+
if (error instanceof AuthenticationError) {
|
|
96
|
+
console.error('Authentication failed');
|
|
97
|
+
} else if (error instanceof ValidationError) {
|
|
98
|
+
console.error('Invalid input');
|
|
99
|
+
} else if (error instanceof NetworkError) {
|
|
100
|
+
console.error('Network error occurred');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Development
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Install dependencies
|
|
109
|
+
npm install
|
|
110
|
+
|
|
111
|
+
# Run tests
|
|
112
|
+
npm test
|
|
113
|
+
|
|
114
|
+
# Build
|
|
115
|
+
npm run build
|
|
116
|
+
|
|
117
|
+
# Lint
|
|
118
|
+
npm run lint
|
|
119
|
+
|
|
120
|
+
# Format code
|
|
121
|
+
npm run format
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT License - see LICENSE file for details.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ERLC=t():e.ERLC=t()}(this,(()=>(()=>{"use strict";var e={985:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Client=void 0;const o=n(r(425)),s=r(110);class i{constructor(e){this.lastCommandTime=0,this.commandQueue=Promise.resolve(),this.validateConfig(e),this.config=e,this.api=o.default.create({baseURL:i.BASE_URL,headers:{Authorization:this.config.globalToken}}),this.api.interceptors.response.use((e=>e),(e=>{if(e.response)switch(e.response.status){case 401:throw new s.AuthenticationError("Invalid authentication credentials");case 400:throw new s.ValidationError(e.response.data.message||"Invalid request");case 429:const t=e.response.data.retry_after;throw new s.NetworkError(`Rate limit exceeded. Retry after ${t} seconds.`);default:throw new s.NetworkError(`Request failed: ${e.response.data.message||e.message}`)}if(e.request)throw new s.NetworkError("No response received from server");throw new s.NetworkError(e.message||"Network request failed")}))}validateConfig(e){if(!e.globalToken)throw new s.ValidationError("Global token is required")}async request(e,t,r="GET",n){try{return(await this.api.request({method:r,url:e,headers:{"Server-Key":t},data:n})).data}catch(e){if(o.default.isAxiosError(e))throw e;throw new s.NetworkError(e instanceof Error?e.message:"Unknown error occurred")}}async waitCooldown(){const e=Date.now()-this.lastCommandTime;if(e<i.COMMAND_COOLDOWN){const t=i.COMMAND_COOLDOWN-e;await new Promise((e=>setTimeout(e,t)))}}enqueueCommand(e){const t=async()=>(await this.waitCooldown(),this.lastCommandTime=Date.now(),await e());return this.commandQueue=this.commandQueue.then(t,t),this.commandQueue}async getServer(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server",e)}async getPlayers(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/players",e)}async getJoinLogs(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/joinlogs",e)}async getKillLogs(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/killlogs",e)}async getCommandLogs(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/commandlogs",e)}async getModcallLogs(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/modcalls",e)}async getBans(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/bans",e)}async getVehicles(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/vehicles",e)}async getQueue(e){if(!e)throw new s.ValidationError("Server token is required");return await this.request("/server/queue",e)}async runCommand(e,t){if(!e)throw new s.ValidationError("Server token is required");if(!t)throw new s.ValidationError("Command is required");return this.enqueueCommand((async()=>(await this.request("/server/command",e,"POST",{command:t}),!0)))}}t.Client=i,i.BASE_URL="https://api.policeroleplay.community/v1",i.COMMAND_COOLDOWN=5e3},110:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NetworkError=t.ValidationError=t.AuthenticationError=t.ERLCError=void 0;class r extends Error{constructor(e){super(e),this.name="ERLCError"}}t.ERLCError=r,t.AuthenticationError=class extends r{constructor(e="Authentication failed"){super(e),this.name="AuthenticationError"}},t.ValidationError=class extends r{constructor(e){super(e),this.name="ValidationError"}},t.NetworkError=class extends r{constructor(e="Network request failed"){super(e),this.name="NetworkError"}}},156:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),o(r(985),t),o(r(574),t),o(r(110),t)},574:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},425:(e,t,r)=>{function n(e,t){return function(){return e.apply(t,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:s}=Object,i=(a=Object.create(null),e=>{const t=o.call(e);return a[t]||(a[t]=t.slice(8,-1).toLowerCase())});var a;const c=e=>(e=e.toLowerCase(),t=>i(t)===e),u=e=>t=>typeof t===e,{isArray:l}=Array,f=u("undefined"),d=c("ArrayBuffer"),h=u("string"),p=u("function"),m=u("number"),y=e=>null!==e&&"object"==typeof e,w=e=>{if("object"!==i(e))return!1;const t=s(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},g=c("Date"),b=c("File"),E=c("Blob"),O=c("FileList"),R=c("URLSearchParams"),[S,v,T,A]=["ReadableStream","Request","Response","Headers"].map(c);function C(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let n,o;if("object"!=typeof e&&(e=[e]),l(e))for(n=0,o=e.length;n<o;n++)t.call(null,e[n],n,e);else{const o=r?Object.getOwnPropertyNames(e):Object.keys(e),s=o.length;let i;for(n=0;n<s;n++)i=o[n],t.call(null,e[i],i,e)}}function x(e,t){t=t.toLowerCase();const r=Object.keys(e);let n,o=r.length;for(;o-- >0;)if(n=r[o],t===n.toLowerCase())return n;return null}const N="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,j=e=>!f(e)&&e!==N,_=(P="undefined"!=typeof Uint8Array&&s(Uint8Array),e=>P&&e instanceof P);var P;const L=c("HTMLFormElement"),k=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),U=c("RegExp"),q=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};C(r,((r,o)=>{let s;!1!==(s=t(r,o,e))&&(n[o]=s||r)})),Object.defineProperties(e,n)},D="abcdefghijklmnopqrstuvwxyz",F="0123456789",B={DIGIT:F,ALPHA:D,ALPHA_DIGIT:D+D.toUpperCase()+F},M=c("AsyncFunction"),I=(V="function"==typeof setImmediate,z=p(N.postMessage),V?setImmediate:z?(H=`axios@${Math.random()}`,J=[],N.addEventListener("message",(({source:e,data:t})=>{e===N&&t===H&&J.length&&J.shift()()}),!1),e=>{J.push(e),N.postMessage(H,"*")}):e=>setTimeout(e));var V,z,H,J;const W="undefined"!=typeof queueMicrotask?queueMicrotask.bind(N):"undefined"!=typeof process&&process.nextTick||I;var K={isArray:l,isArrayBuffer:d,isBuffer:function(e){return null!==e&&!f(e)&&null!==e.constructor&&!f(e.constructor)&&p(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||p(e.append)&&("formdata"===(t=i(e))||"object"===t&&p(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&d(e.buffer),t},isString:h,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:y,isPlainObject:w,isReadableStream:S,isRequest:v,isResponse:T,isHeaders:A,isUndefined:f,isDate:g,isFile:b,isBlob:E,isRegExp:U,isFunction:p,isStream:e=>y(e)&&p(e.pipe),isURLSearchParams:R,isTypedArray:_,isFileList:O,forEach:C,merge:function e(){const{caseless:t}=j(this)&&this||{},r={},n=(n,o)=>{const s=t&&x(r,o)||o;w(r[s])&&w(n)?r[s]=e(r[s],n):w(n)?r[s]=e({},n):l(n)?r[s]=n.slice():r[s]=n};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&C(arguments[e],n);return r},extend:(e,t,r,{allOwnKeys:o}={})=>(C(t,((t,o)=>{r&&p(t)?e[o]=n(t,r):e[o]=t}),{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,n)=>{let o,i,a;const c={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)a=o[i],n&&!n(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==r&&s(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:i,kindOfTest:c,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return-1!==n&&n===r},toArray:e=>{if(!e)return null;if(l(e))return e;let t=e.length;if(!m(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let n;for(;(n=r.next())&&!n.done;){const r=n.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const n=[];for(;null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:L,hasOwnProperty:k,hasOwnProp:k,reduceDescriptors:q,freezeMethods:e=>{q(e,((t,r)=>{if(p(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=e[r];p(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(e,t)=>{const r={},n=e=>{e.forEach((e=>{r[e]=!0}))};return l(e)?n(e):n(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:x,global:N,isContextDefined:j,ALPHABET:B,generateString:(e=16,t=B.ALPHA_DIGIT)=>{let r="";const{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r},isSpecCompliantForm:function(e){return!!(e&&p(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),r=(e,n)=>{if(y(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[n]=e;const o=l(e)?[]:{};return C(e,((e,t)=>{const s=r(e,n+1);!f(s)&&(o[t]=s)})),t[n]=void 0,o}}return e};return r(e,0)},isAsyncFn:M,isThenable:e=>e&&(y(e)||p(e))&&p(e.then)&&p(e.catch),setImmediate:I,asap:W};function $(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o,this.status=o.status?o.status:null)}K.inherits($,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:K.toJSONObject(this.config),code:this.code,status:this.status}}});const G=$.prototype,X={};function Q(e){return K.isPlainObject(e)||K.isArray(e)}function Z(e){return K.endsWith(e,"[]")?e.slice(0,-2):e}function Y(e,t,r){return e?e.concat(t).map((function(e,t){return e=Z(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{X[e]={value:e}})),Object.defineProperties($,X),Object.defineProperty(G,"isAxiosError",{value:!0}),$.from=(e,t,r,n,o,s)=>{const i=Object.create(G);return K.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),$.call(i,e.message,t,r,n,o),i.cause=e,i.name=e.name,s&&Object.assign(i,s),i};const ee=K.toFlatObject(K,{},null,(function(e){return/^is[A-Z]/.test(e)}));function te(e,t,r){if(!K.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(r=K.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!K.isUndefined(t[e])}))).metaTokens,o=r.visitor||u,s=r.dots,i=r.indexes,a=(r.Blob||"undefined"!=typeof Blob&&Blob)&&K.isSpecCompliantForm(t);if(!K.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(K.isDate(e))return e.toISOString();if(!a&&K.isBlob(e))throw new $("Blob is not supported. Use a Buffer instead.");return K.isArrayBuffer(e)||K.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function u(e,r,o){let a=e;if(e&&!o&&"object"==typeof e)if(K.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(K.isArray(e)&&function(e){return K.isArray(e)&&!e.some(Q)}(e)||(K.isFileList(e)||K.endsWith(r,"[]"))&&(a=K.toArray(e)))return r=Z(r),a.forEach((function(e,n){!K.isUndefined(e)&&null!==e&&t.append(!0===i?Y([r],n,s):null===i?r:r+"[]",c(e))})),!1;return!!Q(e)||(t.append(Y(o,r,s),c(e)),!1)}const l=[],f=Object.assign(ee,{defaultVisitor:u,convertValue:c,isVisitable:Q});if(!K.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!K.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),K.forEach(r,(function(r,s){!0===(!(K.isUndefined(r)||null===r)&&o.call(t,r,K.isString(s)?s.trim():s,n,f))&&e(r,n?n.concat(s):[s])})),l.pop()}}(e),t}function re(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function ne(e,t){this._pairs=[],e&&te(e,this,t)}const oe=ne.prototype;function se(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ie(e,t,r){if(!t)return e;const n=r&&r.encode||se;K.isFunction(r)&&(r={serialize:r});const o=r&&r.serialize;let s;if(s=o?o(t,r):K.isURLSearchParams(t)?t.toString():new ne(t,r).toString(n),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}oe.append=function(e,t){this._pairs.push([e,t])},oe.toString=function(e){const t=e?function(t){return e.call(this,t,re)}:re;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var ae=class{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){K.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},ce={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ue={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:ne,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const le="undefined"!=typeof window&&"undefined"!=typeof document,fe="object"==typeof navigator&&navigator||void 0,de=le&&(!fe||["ReactNative","NativeScript","NS"].indexOf(fe.product)<0),he="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,pe=le&&window.location.href||"http://localhost";var me={...Object.freeze({__proto__:null,hasBrowserEnv:le,hasStandardBrowserWebWorkerEnv:he,hasStandardBrowserEnv:de,navigator:fe,origin:pe}),...ue};function ye(e){function t(e,r,n,o){let s=e[o++];if("__proto__"===s)return!0;const i=Number.isFinite(+s),a=o>=e.length;return s=!s&&K.isArray(n)?n.length:s,a?(K.hasOwnProp(n,s)?n[s]=[n[s],r]:n[s]=r,!i):(n[s]&&K.isObject(n[s])||(n[s]=[]),t(e,r,n[s],o)&&K.isArray(n[s])&&(n[s]=function(e){const t={},r=Object.keys(e);let n;const o=r.length;let s;for(n=0;n<o;n++)s=r[n],t[s]=e[s];return t}(n[s])),!i)}if(K.isFormData(e)&&K.isFunction(e.entries)){const r={};return K.forEachEntry(e,((e,n)=>{t(function(e){return K.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),n,r,0)})),r}return null}const we={transitional:ce,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const r=t.getContentType()||"",n=r.indexOf("application/json")>-1,o=K.isObject(e);if(o&&K.isHTMLForm(e)&&(e=new FormData(e)),K.isFormData(e))return n?JSON.stringify(ye(e)):e;if(K.isArrayBuffer(e)||K.isBuffer(e)||K.isStream(e)||K.isFile(e)||K.isBlob(e)||K.isReadableStream(e))return e;if(K.isArrayBufferView(e))return e.buffer;if(K.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return te(e,new me.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return me.isNode&&K.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((s=K.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return te(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||n?(t.setContentType("application/json",!1),function(e){if(K.isString(e))try{return(0,JSON.parse)(e),K.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||we.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(K.isResponse(e)||K.isReadableStream(e))return e;if(e&&K.isString(e)&&(r&&!this.responseType||n)){const r=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(r){if("SyntaxError"===e.name)throw $.from(e,$.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:me.classes.FormData,Blob:me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};K.forEach(["delete","get","head","post","put","patch"],(e=>{we.headers[e]={}}));var ge=we;const be=K.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ee=Symbol("internals");function Oe(e){return e&&String(e).trim().toLowerCase()}function Re(e){return!1===e||null==e?e:K.isArray(e)?e.map(Re):String(e)}function Se(e,t,r,n,o){return K.isFunction(n)?n.call(this,t,r):(o&&(t=r),K.isString(t)?K.isString(n)?-1!==t.indexOf(n):K.isRegExp(n)?n.test(t):void 0:void 0)}class ve{constructor(e){e&&this.set(e)}set(e,t,r){const n=this;function o(e,t,r){const o=Oe(t);if(!o)throw new Error("header name must be a non-empty string");const s=K.findKey(n,o);(!s||void 0===n[s]||!0===r||void 0===r&&!1!==n[s])&&(n[s||t]=Re(e))}const s=(e,t)=>K.forEach(e,((e,r)=>o(e,r,t)));if(K.isPlainObject(e)||e instanceof this.constructor)s(e,t);else if(K.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))s((e=>{const t={};let r,n,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),r=e.substring(0,o).trim().toLowerCase(),n=e.substring(o+1).trim(),!r||t[r]&&be[r]||("set-cookie"===r?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)})),t})(e),t);else if(K.isHeaders(e))for(const[t,n]of e.entries())o(n,t,r);else null!=e&&o(t,e,r);return this}get(e,t){if(e=Oe(e)){const r=K.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}(e);if(K.isFunction(t))return t.call(this,e,r);if(K.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Oe(e)){const r=K.findKey(this,e);return!(!r||void 0===this[r]||t&&!Se(0,this[r],r,t))}return!1}delete(e,t){const r=this;let n=!1;function o(e){if(e=Oe(e)){const o=K.findKey(r,e);!o||t&&!Se(0,r[o],o,t)||(delete r[o],n=!0)}}return K.isArray(e)?e.forEach(o):o(e),n}clear(e){const t=Object.keys(this);let r=t.length,n=!1;for(;r--;){const o=t[r];e&&!Se(0,this[o],o,e,!0)||(delete this[o],n=!0)}return n}normalize(e){const t=this,r={};return K.forEach(this,((n,o)=>{const s=K.findKey(r,o);if(s)return t[s]=Re(n),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,r)=>t.toUpperCase()+r))}(o):String(o).trim();i!==o&&delete t[o],t[i]=Re(n),r[i]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return K.forEach(this,((r,n)=>{null!=r&&!1!==r&&(t[n]=e&&K.isArray(r)?r.join(", "):r)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach((e=>r.set(e))),r}static accessor(e){const t=(this[Ee]=this[Ee]={accessors:{}}).accessors,r=this.prototype;function n(e){const n=Oe(e);t[n]||(function(e,t){const r=K.toCamelCase(" "+t);["get","set","has"].forEach((n=>{Object.defineProperty(e,n+r,{value:function(e,r,o){return this[n].call(this,t,e,r,o)},configurable:!0})}))}(r,e),t[n]=!0)}return K.isArray(e)?e.forEach(n):n(e),this}}ve.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),K.reduceDescriptors(ve.prototype,(({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}})),K.freezeMethods(ve);var Te=ve;function Ae(e,t){const r=this||ge,n=t||r,o=Te.from(n.headers);let s=n.data;return K.forEach(e,(function(e){s=e.call(r,s,o.normalize(),t?t.status:void 0)})),o.normalize(),s}function Ce(e){return!(!e||!e.__CANCEL__)}function xe(e,t,r){$.call(this,null==e?"canceled":e,$.ERR_CANCELED,t,r),this.name="CanceledError"}function Ne(e,t,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new $("Request failed with status code "+r.status,[$.ERR_BAD_REQUEST,$.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}K.inherits(xe,$,{__CANCEL__:!0});const je=(e,t,r=3)=>{let n=0;const o=function(e,t){e=e||10;const r=new Array(e),n=new Array(e);let o,s=0,i=0;return t=void 0!==t?t:1e3,function(a){const c=Date.now(),u=n[i];o||(o=c),r[s]=a,n[s]=c;let l=i,f=0;for(;l!==s;)f+=r[l++],l%=e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),c-o<t)return;const d=u&&c-u;return d?Math.round(1e3*f/d):void 0}}(50,250);return function(e,t){let r,n,o=0,s=1e3/t;const i=(t,s=Date.now())=>{o=s,r=null,n&&(clearTimeout(n),n=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=s?i(e,t):(r=e,n||(n=setTimeout((()=>{n=null,i(r)}),s-a)))},()=>r&&i(r)]}((r=>{const s=r.loaded,i=r.lengthComputable?r.total:void 0,a=s-n,c=o(a);n=s,e({loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:c||void 0,estimated:c&&i&&s<=i?(i-s)/c:void 0,event:r,lengthComputable:null!=i,[t?"download":"upload"]:!0})}),r)},_e=(e,t)=>{const r=null!=e;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},Pe=e=>(...t)=>K.asap((()=>e(...t)));var Le=me.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,me.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(me.origin),me.navigator&&/(msie|trident)/i.test(me.navigator.userAgent)):()=>!0,ke=me.hasStandardBrowserEnv?{write(e,t,r,n,o,s){const i=[e+"="+encodeURIComponent(t)];K.isNumber(r)&&i.push("expires="+new Date(r).toGMTString()),K.isString(n)&&i.push("path="+n),K.isString(o)&&i.push("domain="+o),!0===s&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Ue(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const qe=e=>e instanceof Te?{...e}:e;function De(e,t){t=t||{};const r={};function n(e,t,r,n){return K.isPlainObject(e)&&K.isPlainObject(t)?K.merge.call({caseless:n},e,t):K.isPlainObject(t)?K.merge({},t):K.isArray(t)?t.slice():t}function o(e,t,r,o){return K.isUndefined(t)?K.isUndefined(e)?void 0:n(void 0,e,0,o):n(e,t,0,o)}function s(e,t){if(!K.isUndefined(t))return n(void 0,t)}function i(e,t){return K.isUndefined(t)?K.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function a(r,o,s){return s in t?n(r,o):s in e?n(void 0,r):void 0}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(e,t,r)=>o(qe(e),qe(t),0,!0)};return K.forEach(Object.keys(Object.assign({},e,t)),(function(n){const s=c[n]||o,i=s(e[n],t[n],n);K.isUndefined(i)&&s!==a||(r[n]=i)})),r}var Fe=e=>{const t=De({},e);let r,{data:n,withXSRFToken:o,xsrfHeaderName:s,xsrfCookieName:i,headers:a,auth:c}=t;if(t.headers=a=Te.from(a),t.url=ie(Ue(t.baseURL,t.url),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),K.isFormData(n))if(me.hasStandardBrowserEnv||me.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(r=a.getContentType())){const[e,...t]=r?r.split(";").map((e=>e.trim())).filter(Boolean):[];a.setContentType([e||"multipart/form-data",...t].join("; "))}if(me.hasStandardBrowserEnv&&(o&&K.isFunction(o)&&(o=o(t)),o||!1!==o&&Le(t.url))){const e=s&&i&&ke.read(i);e&&a.set(s,e)}return t},Be="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,r){const n=Fe(e);let o=n.data;const s=Te.from(n.headers).normalize();let i,a,c,u,l,{responseType:f,onUploadProgress:d,onDownloadProgress:h}=n;function p(){u&&u(),l&&l(),n.cancelToken&&n.cancelToken.unsubscribe(i),n.signal&&n.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function y(){if(!m)return;const n=Te.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Ne((function(e){t(e),p()}),(function(e){r(e),p()}),{data:f&&"text"!==f&&"json"!==f?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:n,config:e,request:m}),m=null}m.open(n.method.toUpperCase(),n.url,!0),m.timeout=n.timeout,"onloadend"in m?m.onloadend=y:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(y)},m.onabort=function(){m&&(r(new $("Request aborted",$.ECONNABORTED,e,m)),m=null)},m.onerror=function(){r(new $("Network Error",$.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const o=n.transitional||ce;n.timeoutErrorMessage&&(t=n.timeoutErrorMessage),r(new $(t,o.clarifyTimeoutError?$.ETIMEDOUT:$.ECONNABORTED,e,m)),m=null},void 0===o&&s.setContentType(null),"setRequestHeader"in m&&K.forEach(s.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),K.isUndefined(n.withCredentials)||(m.withCredentials=!!n.withCredentials),f&&"json"!==f&&(m.responseType=n.responseType),h&&([c,l]=je(h,!0),m.addEventListener("progress",c)),d&&m.upload&&([a,u]=je(d),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",u)),(n.cancelToken||n.signal)&&(i=t=>{m&&(r(!t||t.type?new xe(null,e,m):t),m.abort(),m=null)},n.cancelToken&&n.cancelToken.subscribe(i),n.signal&&(n.signal.aborted?i():n.signal.addEventListener("abort",i)));const w=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(n.url);w&&-1===me.protocols.indexOf(w)?r(new $("Unsupported protocol "+w+":",$.ERR_BAD_REQUEST,e)):m.send(o||null)}))},Me=(e,t)=>{const{length:r}=e=e?e.filter(Boolean):[];if(t||r){let r,n=new AbortController;const o=function(e){if(!r){r=!0,i();const t=e instanceof Error?e:this.reason;n.abort(t instanceof $?t:new xe(t instanceof Error?t.message:t))}};let s=t&&setTimeout((()=>{s=null,o(new $(`timeout ${t} of ms exceeded`,$.ETIMEDOUT))}),t);const i=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:a}=n;return a.unsubscribe=()=>K.asap(i),a}};const Ie=function*(e,t){let r=e.byteLength;if(!t||r<t)return void(yield e);let n,o=0;for(;o<r;)n=o+t,yield e.slice(o,n),o=n},Ve=(e,t,r,n)=>{const o=async function*(e,t){for await(const r of async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:r}=await t.read();if(e)break;yield r}}finally{await t.cancel()}}(e))yield*Ie(r,t)}(e,t);let s,i=0,a=e=>{s||(s=!0,n&&n(e))};return new ReadableStream({async pull(e){try{const{done:t,value:n}=await o.next();if(t)return a(),void e.close();let s=n.byteLength;if(r){let e=i+=s;r(e)}e.enqueue(new Uint8Array(n))}catch(e){throw a(e),e}},cancel:e=>(a(e),o.return())},{highWaterMark:2})},ze="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,He=ze&&"function"==typeof ReadableStream,Je=ze&&("function"==typeof TextEncoder?(We=new TextEncoder,e=>We.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var We;const Ke=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},$e=He&&Ke((()=>{let e=!1;const t=new Request(me.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ge=He&&Ke((()=>K.isReadableStream(new Response("").body))),Xe={stream:Ge&&(e=>e.body)};var Qe;ze&&(Qe=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!Xe[e]&&(Xe[e]=K.isFunction(Qe[e])?t=>t[e]():(t,r)=>{throw new $(`Response type '${e}' is not supported`,$.ERR_NOT_SUPPORT,r)})})));const Ze={http:null,xhr:Be,fetch:ze&&(async e=>{let{url:t,method:r,data:n,signal:o,cancelToken:s,timeout:i,onDownloadProgress:a,onUploadProgress:c,responseType:u,headers:l,withCredentials:f="same-origin",fetchOptions:d}=Fe(e);u=u?(u+"").toLowerCase():"text";let h,p=Me([o,s&&s.toAbortSignal()],i);const m=p&&p.unsubscribe&&(()=>{p.unsubscribe()});let y;try{if(c&&$e&&"get"!==r&&"head"!==r&&0!==(y=await(async(e,t)=>{const r=K.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(K.isBlob(e))return e.size;if(K.isSpecCompliantForm(e)){const t=new Request(me.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return K.isArrayBufferView(e)||K.isArrayBuffer(e)?e.byteLength:(K.isURLSearchParams(e)&&(e+=""),K.isString(e)?(await Je(e)).byteLength:void 0)})(t):r})(l,n))){let e,r=new Request(t,{method:"POST",body:n,duplex:"half"});if(K.isFormData(n)&&(e=r.headers.get("content-type"))&&l.setContentType(e),r.body){const[e,t]=_e(y,je(Pe(c)));n=Ve(r.body,65536,e,t)}}K.isString(f)||(f=f?"include":"omit");const o="credentials"in Request.prototype;h=new Request(t,{...d,signal:p,method:r.toUpperCase(),headers:l.normalize().toJSON(),body:n,duplex:"half",credentials:o?f:void 0});let s=await fetch(h);const i=Ge&&("stream"===u||"response"===u);if(Ge&&(a||i&&m)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=s[t]}));const t=K.toFiniteNumber(s.headers.get("content-length")),[r,n]=a&&_e(t,je(Pe(a),!0))||[];s=new Response(Ve(s.body,65536,r,(()=>{n&&n(),m&&m()})),e)}u=u||"text";let w=await Xe[K.findKey(Xe,u)||"text"](s,e);return!i&&m&&m(),await new Promise(((t,r)=>{Ne(t,r,{data:w,headers:Te.from(s.headers),status:s.status,statusText:s.statusText,config:e,request:h})}))}catch(t){if(m&&m(),t&&"TypeError"===t.name&&/fetch/i.test(t.message))throw Object.assign(new $("Network Error",$.ERR_NETWORK,e,h),{cause:t.cause||t});throw $.from(t,t&&t.code,e,h)}})};K.forEach(Ze,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ye=e=>`- ${e}`,et=e=>K.isFunction(e)||null===e||!1===e;var tt=e=>{e=K.isArray(e)?e:[e];const{length:t}=e;let r,n;const o={};for(let s=0;s<t;s++){let t;if(r=e[s],n=r,!et(r)&&(n=Ze[(t=String(r)).toLowerCase()],void 0===n))throw new $(`Unknown adapter '${t}'`);if(n)break;o[t||"#"+s]=n}if(!n){const e=Object.entries(o).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new $("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Ye).join("\n"):" "+Ye(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function rt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new xe(null,e)}function nt(e){return rt(e),e.headers=Te.from(e.headers),e.data=Ae.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),tt(e.adapter||ge.adapter)(e).then((function(t){return rt(e),t.data=Ae.call(e,e.transformResponse,t),t.headers=Te.from(t.headers),t}),(function(t){return Ce(t)||(rt(e),t&&t.response&&(t.response.data=Ae.call(e,e.transformResponse,t.response),t.response.headers=Te.from(t.response.headers))),Promise.reject(t)}))}const ot={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{ot[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));const st={};ot.transitional=function(e,t,r){function n(e,t){return"[Axios v1.7.9] Transitional option '"+e+"'"+t+(r?". "+r:"")}return(r,o,s)=>{if(!1===e)throw new $(n(o," has been removed"+(t?" in "+t:"")),$.ERR_DEPRECATED);return t&&!st[o]&&(st[o]=!0,console.warn(n(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,o,s)}},ot.spelling=function(e){return(t,r)=>(console.warn(`${r} is likely a misspelling of ${e}`),!0)};var it={assertOptions:function(e,t,r){if("object"!=typeof e)throw new $("options must be an object",$.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let o=n.length;for(;o-- >0;){const s=n[o],i=t[s];if(i){const t=e[s],r=void 0===t||i(t,s,e);if(!0!==r)throw new $("option "+s+" must be "+r,$.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new $("Unknown option "+s,$.ERR_BAD_OPTION)}},validators:ot};const at=it.validators;class ct{constructor(e){this.defaults=e,this.interceptors={request:new ae,response:new ae}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const r=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?r&&!String(e.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+r):e.stack=r}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=De(this.defaults,t);const{transitional:r,paramsSerializer:n,headers:o}=t;void 0!==r&&it.assertOptions(r,{silentJSONParsing:at.transitional(at.boolean),forcedJSONParsing:at.transitional(at.boolean),clarifyTimeoutError:at.transitional(at.boolean)},!1),null!=n&&(K.isFunction(n)?t.paramsSerializer={serialize:n}:it.assertOptions(n,{encode:at.function,serialize:at.function},!0)),it.assertOptions(t,{baseUrl:at.spelling("baseURL"),withXsrfToken:at.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=o&&K.merge(o.common,o[t.method]);o&&K.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Te.concat(s,o);const i=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const c=[];let u;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let l,f=0;if(!a){const e=[nt.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,c),l=e.length,u=Promise.resolve(t);f<l;)u=u.then(e[f++],e[f++]);return u}l=i.length;let d=t;for(f=0;f<l;){const e=i[f++],t=i[f++];try{d=e(d)}catch(e){t.call(this,e);break}}try{u=nt.call(this,d)}catch(e){return Promise.reject(e)}for(f=0,l=c.length;f<l;)u=u.then(c[f++],c[f++]);return u}getUri(e){return ie(Ue((e=De(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}K.forEach(["delete","get","head","options"],(function(e){ct.prototype[e]=function(t,r){return this.request(De(r||{},{method:e,url:t,data:(r||{}).data}))}})),K.forEach(["post","put","patch"],(function(e){function t(t){return function(r,n,o){return this.request(De(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}ct.prototype[e]=t(),ct.prototype[e+"Form"]=t(!0)}));var ut=ct;class lt{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const r=this;this.promise.then((e=>{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null})),this.promise.then=e=>{let t;const n=new Promise((e=>{r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,n,o){r.reason||(r.reason=new xe(e,n,o),t(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new lt((function(t){e=t})),cancel:e}}}var ft=lt;const dt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(dt).forEach((([e,t])=>{dt[t]=e}));var ht=dt;const pt=function e(t){const r=new ut(t),o=n(ut.prototype.request,r);return K.extend(o,ut.prototype,r,{allOwnKeys:!0}),K.extend(o,r,null,{allOwnKeys:!0}),o.create=function(r){return e(De(t,r))},o}(ge);pt.Axios=ut,pt.CanceledError=xe,pt.CancelToken=ft,pt.isCancel=Ce,pt.VERSION="1.7.9",pt.toFormData=te,pt.AxiosError=$,pt.Cancel=pt.CanceledError,pt.all=function(e){return Promise.all(e)},pt.spread=function(e){return function(t){return e.apply(null,t)}},pt.isAxiosError=function(e){return K.isObject(e)&&!0===e.isAxiosError},pt.mergeConfig=De,pt.AxiosHeaders=Te,pt.formToJSON=e=>ye(K.isHTMLForm(e)?new FormData(e):e),pt.getAdapter=tt,pt.HttpStatusCode=ht,pt.default=pt,e.exports=pt}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,r),s.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r(156)})()));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ClientConfig, ServerStatus, ServerPlayer, JoinLog, KillLog, CommandLog, ModcallLog, VehicleLog, ServerBan } from './types';
|
|
2
|
+
export declare class Client {
|
|
3
|
+
private readonly api;
|
|
4
|
+
private readonly config;
|
|
5
|
+
private static readonly BASE_URL;
|
|
6
|
+
private lastCommandTime;
|
|
7
|
+
private static readonly COMMAND_COOLDOWN;
|
|
8
|
+
private commandQueue;
|
|
9
|
+
constructor(config: ClientConfig);
|
|
10
|
+
private validateConfig;
|
|
11
|
+
private request;
|
|
12
|
+
private waitCooldown;
|
|
13
|
+
private enqueueCommand;
|
|
14
|
+
getServer(serverToken: string): Promise<ServerStatus>;
|
|
15
|
+
getPlayers(serverToken: string): Promise<ServerPlayer[]>;
|
|
16
|
+
getJoinLogs(serverToken: string): Promise<JoinLog[]>;
|
|
17
|
+
getKillLogs(serverToken: string): Promise<KillLog[]>;
|
|
18
|
+
getCommandLogs(serverToken: string): Promise<CommandLog[]>;
|
|
19
|
+
getModcallLogs(serverToken: string): Promise<ModcallLog[]>;
|
|
20
|
+
getBans(serverToken: string): Promise<ServerBan>;
|
|
21
|
+
getVehicles(serverToken: string): Promise<VehicleLog[]>;
|
|
22
|
+
getQueue(serverToken: string): Promise<number[]>;
|
|
23
|
+
runCommand(serverToken: string, command: string): Promise<boolean>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACV,MAAM,SAAS,CAAC;AAGjB,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IAC7E,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IAChD,OAAO,CAAC,YAAY,CAAmC;gBAE3C,MAAM,EAAE,YAAY;IAoChC,OAAO,CAAC,cAAc;YAMR,OAAO;YAwBP,YAAY;IAU1B,OAAO,CAAC,cAAc;IAWhB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOrD,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAOxD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOpD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOpD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO1D,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO1D,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAOhD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOvD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOhD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAazE"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Client = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
class Client {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.lastCommandTime = 0;
|
|
12
|
+
this.commandQueue = Promise.resolve();
|
|
13
|
+
this.validateConfig(config);
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.api = axios_1.default.create({
|
|
16
|
+
baseURL: Client.BASE_URL,
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: this.config.globalToken,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
this.api.interceptors.response.use((response) => response, (error) => {
|
|
22
|
+
if (error.response) {
|
|
23
|
+
switch (error.response.status) {
|
|
24
|
+
case 401:
|
|
25
|
+
throw new errors_1.AuthenticationError('Invalid authentication credentials');
|
|
26
|
+
case 400:
|
|
27
|
+
throw new errors_1.ValidationError(error.response.data.message || 'Invalid request');
|
|
28
|
+
case 429:
|
|
29
|
+
const retryAfter = error.response.data.retry_after;
|
|
30
|
+
throw new errors_1.NetworkError(`Rate limit exceeded. Retry after ${retryAfter} seconds.`);
|
|
31
|
+
default:
|
|
32
|
+
throw new errors_1.NetworkError(`Request failed: ${error.response.data.message || error.message}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (error.request) {
|
|
36
|
+
throw new errors_1.NetworkError('No response received from server');
|
|
37
|
+
}
|
|
38
|
+
throw new errors_1.NetworkError(error.message || 'Network request failed');
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
validateConfig(config) {
|
|
42
|
+
if (!config.globalToken) {
|
|
43
|
+
throw new errors_1.ValidationError('Global token is required');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async request(endpoint, serverToken, method = 'GET', data) {
|
|
47
|
+
try {
|
|
48
|
+
const response = await this.api.request({
|
|
49
|
+
method,
|
|
50
|
+
url: endpoint,
|
|
51
|
+
headers: {
|
|
52
|
+
'Server-Key': serverToken,
|
|
53
|
+
},
|
|
54
|
+
data,
|
|
55
|
+
});
|
|
56
|
+
return response.data;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
throw new errors_1.NetworkError(error instanceof Error ? error.message : 'Unknown error occurred');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async waitCooldown() {
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
const timeSinceLastCommand = now - this.lastCommandTime;
|
|
68
|
+
if (timeSinceLastCommand < Client.COMMAND_COOLDOWN) {
|
|
69
|
+
const waitTime = Client.COMMAND_COOLDOWN - timeSinceLastCommand;
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
enqueueCommand(operation) {
|
|
74
|
+
const execute = async () => {
|
|
75
|
+
await this.waitCooldown();
|
|
76
|
+
this.lastCommandTime = Date.now();
|
|
77
|
+
return await operation();
|
|
78
|
+
};
|
|
79
|
+
this.commandQueue = this.commandQueue.then(execute, execute);
|
|
80
|
+
return this.commandQueue;
|
|
81
|
+
}
|
|
82
|
+
async getServer(serverToken) {
|
|
83
|
+
if (!serverToken) {
|
|
84
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
85
|
+
}
|
|
86
|
+
return await this.request('/server', serverToken);
|
|
87
|
+
}
|
|
88
|
+
async getPlayers(serverToken) {
|
|
89
|
+
if (!serverToken) {
|
|
90
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
91
|
+
}
|
|
92
|
+
return await this.request('/server/players', serverToken);
|
|
93
|
+
}
|
|
94
|
+
async getJoinLogs(serverToken) {
|
|
95
|
+
if (!serverToken) {
|
|
96
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
97
|
+
}
|
|
98
|
+
return await this.request('/server/joinlogs', serverToken);
|
|
99
|
+
}
|
|
100
|
+
async getKillLogs(serverToken) {
|
|
101
|
+
if (!serverToken) {
|
|
102
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
103
|
+
}
|
|
104
|
+
return await this.request('/server/killlogs', serverToken);
|
|
105
|
+
}
|
|
106
|
+
async getCommandLogs(serverToken) {
|
|
107
|
+
if (!serverToken) {
|
|
108
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
109
|
+
}
|
|
110
|
+
return await this.request('/server/commandlogs', serverToken);
|
|
111
|
+
}
|
|
112
|
+
async getModcallLogs(serverToken) {
|
|
113
|
+
if (!serverToken) {
|
|
114
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
115
|
+
}
|
|
116
|
+
return await this.request('/server/modcalls', serverToken);
|
|
117
|
+
}
|
|
118
|
+
async getBans(serverToken) {
|
|
119
|
+
if (!serverToken) {
|
|
120
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
121
|
+
}
|
|
122
|
+
return await this.request('/server/bans', serverToken);
|
|
123
|
+
}
|
|
124
|
+
async getVehicles(serverToken) {
|
|
125
|
+
if (!serverToken) {
|
|
126
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
127
|
+
}
|
|
128
|
+
return await this.request('/server/vehicles', serverToken);
|
|
129
|
+
}
|
|
130
|
+
async getQueue(serverToken) {
|
|
131
|
+
if (!serverToken) {
|
|
132
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
133
|
+
}
|
|
134
|
+
return await this.request('/server/queue', serverToken);
|
|
135
|
+
}
|
|
136
|
+
async runCommand(serverToken, command) {
|
|
137
|
+
if (!serverToken) {
|
|
138
|
+
throw new errors_1.ValidationError('Server token is required');
|
|
139
|
+
}
|
|
140
|
+
if (!command) {
|
|
141
|
+
throw new errors_1.ValidationError('Command is required');
|
|
142
|
+
}
|
|
143
|
+
return this.enqueueCommand(async () => {
|
|
144
|
+
const result = await this.request('/server/command', serverToken, 'POST', { command });
|
|
145
|
+
return true;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.Client = Client;
|
|
150
|
+
Client.BASE_URL = 'https://api.policeroleplay.community/v1';
|
|
151
|
+
Client.COMMAND_COOLDOWN = 5000;
|
|
152
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class ERLCError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class AuthenticationError extends ERLCError {
|
|
5
|
+
constructor(message?: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class ValidationError extends ERLCError {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class NetworkError extends ERLCError {
|
|
11
|
+
constructor(message?: string);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,OAAO,GAAE,MAAgC;CAItD;AAED,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,YAAa,SAAQ,SAAS;gBAC7B,OAAO,GAAE,MAAiC;CAIvD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NetworkError = exports.ValidationError = exports.AuthenticationError = exports.ERLCError = void 0;
|
|
4
|
+
class ERLCError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'ERLCError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.ERLCError = ERLCError;
|
|
11
|
+
class AuthenticationError extends ERLCError {
|
|
12
|
+
constructor(message = 'Authentication failed') {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'AuthenticationError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.AuthenticationError = AuthenticationError;
|
|
18
|
+
class ValidationError extends ERLCError {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = 'ValidationError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.ValidationError = ValidationError;
|
|
25
|
+
class NetworkError extends ERLCError {
|
|
26
|
+
constructor(message = 'Network request failed') {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = 'NetworkError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.NetworkError = NetworkError;
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AALD,8BAKC;AAED,MAAa,mBAAoB,SAAQ,SAAS;IAChD,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED,MAAa,eAAgB,SAAQ,SAAS;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,MAAa,YAAa,SAAQ,SAAS;IACzC,YAAY,UAAkB,wBAAwB;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AALD,oCAKC"}
|