fluxer.ts 0.1.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/README.md +169 -0
- package/dist/client.d.ts +154 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +260 -0
- package/dist/client.js.map +1 -0
- package/dist/gateway.d.ts +34 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +175 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/rest.d.ts +43 -0
- package/dist/rest.d.ts.map +1 -0
- package/dist/rest.js +113 -0
- package/dist/rest.js.map +1 -0
- package/dist/routes.d.ts +51 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +58 -0
- package/dist/routes.js.map +1 -0
- package/dist/types.d.ts +292 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +73 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -0
package/dist/gateway.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/** WebSocket gateway client for Fluxer. Handles connection, heartbeat, resume, and reconnection. */
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import WebSocket from 'ws';
|
|
4
|
+
import { GatewayOpcode } from './types.js';
|
|
5
|
+
const GATEWAY_VERSION = 1;
|
|
6
|
+
const RECONNECT_INITIAL = 1000;
|
|
7
|
+
const RECONNECT_MAX = 45000;
|
|
8
|
+
export class Gateway extends EventEmitter {
|
|
9
|
+
ws = null;
|
|
10
|
+
token;
|
|
11
|
+
intents;
|
|
12
|
+
gatewayUrl;
|
|
13
|
+
heartbeatInterval = null;
|
|
14
|
+
heartbeatAck = true;
|
|
15
|
+
sessionId = null;
|
|
16
|
+
seq = null;
|
|
17
|
+
resumeUrl = null;
|
|
18
|
+
destroying = false;
|
|
19
|
+
reconnectDelay = RECONNECT_INITIAL;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
super();
|
|
22
|
+
this.token = options.token;
|
|
23
|
+
this.intents = options.intents;
|
|
24
|
+
this.gatewayUrl = options.gatewayUrl;
|
|
25
|
+
}
|
|
26
|
+
connect() {
|
|
27
|
+
const url = this.resumeUrl ?? this.gatewayUrl;
|
|
28
|
+
const fullUrl = `${url}?v=${GATEWAY_VERSION}&encoding=json`;
|
|
29
|
+
this.ws = new WebSocket(fullUrl);
|
|
30
|
+
this.ws.on('open', () => this.emit('debug', `Connected to ${url}`));
|
|
31
|
+
this.ws.on('message', (data) => this.onMessage(data));
|
|
32
|
+
this.ws.on('close', (code, reason) => this.onClose(code, reason.toString()));
|
|
33
|
+
this.ws.on('error', (err) => this.emit('error', err));
|
|
34
|
+
}
|
|
35
|
+
destroy() {
|
|
36
|
+
this.destroying = true;
|
|
37
|
+
this.stopHeartbeat();
|
|
38
|
+
this.ws?.close(1000);
|
|
39
|
+
this.ws = null;
|
|
40
|
+
}
|
|
41
|
+
onMessage(raw) {
|
|
42
|
+
const payload = JSON.parse(raw.toString());
|
|
43
|
+
if (payload.s !== null)
|
|
44
|
+
this.seq = payload.s;
|
|
45
|
+
switch (payload.op) {
|
|
46
|
+
case GatewayOpcode.Hello:
|
|
47
|
+
this.startHeartbeat(payload.d.heartbeat_interval);
|
|
48
|
+
if (this.sessionId) {
|
|
49
|
+
this.resume();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.identify();
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case GatewayOpcode.HeartbeatAck:
|
|
56
|
+
this.heartbeatAck = true;
|
|
57
|
+
break;
|
|
58
|
+
case GatewayOpcode.Heartbeat:
|
|
59
|
+
this.sendHeartbeat();
|
|
60
|
+
break;
|
|
61
|
+
case GatewayOpcode.Dispatch:
|
|
62
|
+
this.handleDispatch(payload.t, payload.d);
|
|
63
|
+
break;
|
|
64
|
+
case GatewayOpcode.Reconnect:
|
|
65
|
+
this.emit('debug', 'Server requested reconnect');
|
|
66
|
+
this.reconnect();
|
|
67
|
+
break;
|
|
68
|
+
case GatewayOpcode.InvalidSession:
|
|
69
|
+
this.emit('debug', `Invalid session (resumable: ${payload.d})`);
|
|
70
|
+
if (payload.d) {
|
|
71
|
+
setTimeout(() => this.resume(), 1000 + Math.random() * 4000);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.sessionId = null;
|
|
75
|
+
this.seq = null;
|
|
76
|
+
this.resumeUrl = null;
|
|
77
|
+
setTimeout(() => this.identify(), 1000 + Math.random() * 4000);
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
handleDispatch(event, data) {
|
|
83
|
+
if (event === 'READY') {
|
|
84
|
+
const ready = data;
|
|
85
|
+
this.sessionId = ready.session_id;
|
|
86
|
+
this.resumeUrl = ready.resume_gateway_url ?? null;
|
|
87
|
+
this.reconnectDelay = RECONNECT_INITIAL;
|
|
88
|
+
}
|
|
89
|
+
if (event === 'RESUMED') {
|
|
90
|
+
this.reconnectDelay = RECONNECT_INITIAL;
|
|
91
|
+
this.emit('debug', 'Session resumed');
|
|
92
|
+
}
|
|
93
|
+
this.emit('dispatch', event, data);
|
|
94
|
+
}
|
|
95
|
+
identify() {
|
|
96
|
+
this.send({
|
|
97
|
+
op: GatewayOpcode.Identify,
|
|
98
|
+
d: {
|
|
99
|
+
token: this.token,
|
|
100
|
+
intents: this.intents,
|
|
101
|
+
properties: {
|
|
102
|
+
os: process.platform,
|
|
103
|
+
browser: 'fluxer-sdk',
|
|
104
|
+
device: 'fluxer-sdk',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
s: null,
|
|
108
|
+
t: null,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
resume() {
|
|
112
|
+
this.send({
|
|
113
|
+
op: GatewayOpcode.Resume,
|
|
114
|
+
d: {
|
|
115
|
+
token: this.token,
|
|
116
|
+
session_id: this.sessionId,
|
|
117
|
+
seq: this.seq,
|
|
118
|
+
},
|
|
119
|
+
s: null,
|
|
120
|
+
t: null,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
send(payload) {
|
|
124
|
+
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
125
|
+
this.ws.send(JSON.stringify(payload));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
sendHeartbeat() {
|
|
129
|
+
this.send({ op: GatewayOpcode.Heartbeat, d: this.seq, s: null, t: null });
|
|
130
|
+
}
|
|
131
|
+
startHeartbeat(interval) {
|
|
132
|
+
this.stopHeartbeat();
|
|
133
|
+
this.heartbeatAck = true;
|
|
134
|
+
// Send first heartbeat with jitter
|
|
135
|
+
setTimeout(() => this.sendHeartbeat(), interval * Math.random());
|
|
136
|
+
this.heartbeatInterval = setInterval(() => {
|
|
137
|
+
if (!this.heartbeatAck) {
|
|
138
|
+
this.emit('debug', 'Heartbeat not acknowledged — reconnecting');
|
|
139
|
+
this.reconnect();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
this.heartbeatAck = false;
|
|
143
|
+
this.sendHeartbeat();
|
|
144
|
+
}, interval);
|
|
145
|
+
}
|
|
146
|
+
stopHeartbeat() {
|
|
147
|
+
if (this.heartbeatInterval) {
|
|
148
|
+
clearInterval(this.heartbeatInterval);
|
|
149
|
+
this.heartbeatInterval = null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
onClose(code, reason) {
|
|
153
|
+
this.stopHeartbeat();
|
|
154
|
+
this.emit('debug', `Connection closed: ${code} ${reason}`);
|
|
155
|
+
if (this.destroying)
|
|
156
|
+
return;
|
|
157
|
+
// Non-recoverable close codes
|
|
158
|
+
const fatal = [4004, 4010, 4011, 4012, 4013, 4014];
|
|
159
|
+
if (fatal.includes(code)) {
|
|
160
|
+
this.emit('error', new Error(`Fatal gateway close: ${code} ${reason}`));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this.reconnect();
|
|
164
|
+
}
|
|
165
|
+
reconnect() {
|
|
166
|
+
this.stopHeartbeat();
|
|
167
|
+
this.ws?.close(4000);
|
|
168
|
+
this.ws = null;
|
|
169
|
+
const delay = this.reconnectDelay + Math.random() * 1000;
|
|
170
|
+
this.reconnectDelay = Math.min(this.reconnectDelay * 2, RECONNECT_MAX);
|
|
171
|
+
this.emit('debug', `Reconnecting in ${Math.round(delay)}ms`);
|
|
172
|
+
setTimeout(() => this.connect(), delay);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Client, GatewayIntents, IntentsAll } from './client.js';
|
|
2
|
+
export type { ClientOptions, ClientEvents } from './client.js';
|
|
3
|
+
export { REST, FluxerAPIError, RateLimitError } from './rest.js';
|
|
4
|
+
export type { RESTOptions } from './rest.js';
|
|
5
|
+
export { Gateway } from './gateway.js';
|
|
6
|
+
export type { GatewayOptions } from './gateway.js';
|
|
7
|
+
export { Routes } from './routes.js';
|
|
8
|
+
export * from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,cAAc,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Client, GatewayIntents, IntentsAll } from './client.js';
|
|
2
|
+
export { REST, FluxerAPIError, RateLimitError } from './rest.js';
|
|
3
|
+
export { Gateway } from './gateway.js';
|
|
4
|
+
export { Routes } from './routes.js';
|
|
5
|
+
export * from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,cAAc,YAAY,CAAC"}
|
package/dist/rest.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Lightweight REST client for the Fluxer API. Built on native fetch. */
|
|
2
|
+
export declare class FluxerAPIError extends Error {
|
|
3
|
+
readonly status: number;
|
|
4
|
+
readonly body: unknown;
|
|
5
|
+
readonly method: string;
|
|
6
|
+
readonly path: string;
|
|
7
|
+
constructor(status: number, body: unknown, method: string, path: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class RateLimitError extends Error {
|
|
10
|
+
readonly retryAfter: number;
|
|
11
|
+
readonly method: string;
|
|
12
|
+
readonly path: string;
|
|
13
|
+
constructor(retryAfter: number, method: string, path: string);
|
|
14
|
+
}
|
|
15
|
+
export interface RESTOptions {
|
|
16
|
+
token: string;
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
maxRetries?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class REST {
|
|
21
|
+
private token;
|
|
22
|
+
private baseUrl;
|
|
23
|
+
private maxRetries;
|
|
24
|
+
constructor(options: RESTOptions);
|
|
25
|
+
get<T = unknown>(path: string): Promise<T>;
|
|
26
|
+
post<T = unknown>(path: string, options?: {
|
|
27
|
+
body?: unknown;
|
|
28
|
+
files?: Array<{
|
|
29
|
+
name: string;
|
|
30
|
+
data: Buffer | ArrayBuffer;
|
|
31
|
+
filename?: string;
|
|
32
|
+
}>;
|
|
33
|
+
}): Promise<T>;
|
|
34
|
+
patch<T = unknown>(path: string, options?: {
|
|
35
|
+
body?: unknown;
|
|
36
|
+
}): Promise<T>;
|
|
37
|
+
put<T = unknown>(path: string, options?: {
|
|
38
|
+
body?: unknown;
|
|
39
|
+
}): Promise<T>;
|
|
40
|
+
delete<T = unknown>(path: string): Promise<T>;
|
|
41
|
+
private request;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=rest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAKzE,qBAAa,cAAe,SAAQ,KAAK;aAErB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,OAAO;aACb,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBAHZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM;CAK/B;AAED,qBAAa,cAAe,SAAQ,KAAK;aAErB,UAAU,EAAE,MAAM;aAClB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBAFZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM;CAK/B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,IAAI;IACf,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,WAAW;IAM1B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1C,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzJ,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1E,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAIxE,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAIrC,OAAO;CA4DtB"}
|
package/dist/rest.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/** Lightweight REST client for the Fluxer API. Built on native fetch. */
|
|
2
|
+
const API_BASE = 'https://api.fluxer.app/v1';
|
|
3
|
+
const USER_AGENT = 'fluxer.ts (https://github.com/zeroxs/fluxer.ts, 0.1.0)';
|
|
4
|
+
export class FluxerAPIError extends Error {
|
|
5
|
+
status;
|
|
6
|
+
body;
|
|
7
|
+
method;
|
|
8
|
+
path;
|
|
9
|
+
constructor(status, body, method, path) {
|
|
10
|
+
super(`${method} ${path} → ${status}`);
|
|
11
|
+
this.status = status;
|
|
12
|
+
this.body = body;
|
|
13
|
+
this.method = method;
|
|
14
|
+
this.path = path;
|
|
15
|
+
this.name = 'FluxerAPIError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class RateLimitError extends Error {
|
|
19
|
+
retryAfter;
|
|
20
|
+
method;
|
|
21
|
+
path;
|
|
22
|
+
constructor(retryAfter, method, path) {
|
|
23
|
+
super(`Rate limited on ${method} ${path} — retry after ${retryAfter}ms`);
|
|
24
|
+
this.retryAfter = retryAfter;
|
|
25
|
+
this.method = method;
|
|
26
|
+
this.path = path;
|
|
27
|
+
this.name = 'RateLimitError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class REST {
|
|
31
|
+
token;
|
|
32
|
+
baseUrl;
|
|
33
|
+
maxRetries;
|
|
34
|
+
constructor(options) {
|
|
35
|
+
this.token = options.token;
|
|
36
|
+
this.baseUrl = options.baseUrl ?? API_BASE;
|
|
37
|
+
this.maxRetries = options.maxRetries ?? 3;
|
|
38
|
+
}
|
|
39
|
+
async get(path) {
|
|
40
|
+
return this.request('GET', path);
|
|
41
|
+
}
|
|
42
|
+
async post(path, options) {
|
|
43
|
+
return this.request('POST', path, options);
|
|
44
|
+
}
|
|
45
|
+
async patch(path, options) {
|
|
46
|
+
return this.request('PATCH', path, options);
|
|
47
|
+
}
|
|
48
|
+
async put(path, options) {
|
|
49
|
+
return this.request('PUT', path, options);
|
|
50
|
+
}
|
|
51
|
+
async delete(path) {
|
|
52
|
+
return this.request('DELETE', path);
|
|
53
|
+
}
|
|
54
|
+
async request(method, path, options) {
|
|
55
|
+
const url = `${this.baseUrl}${path}`;
|
|
56
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
57
|
+
const headers = {
|
|
58
|
+
'Authorization': `Bot ${this.token}`,
|
|
59
|
+
'User-Agent': USER_AGENT,
|
|
60
|
+
};
|
|
61
|
+
let body;
|
|
62
|
+
if (options?.files?.length) {
|
|
63
|
+
// Multipart form data for file uploads
|
|
64
|
+
const form = new FormData();
|
|
65
|
+
if (options.body) {
|
|
66
|
+
form.append('payload_json', JSON.stringify(options.body));
|
|
67
|
+
}
|
|
68
|
+
for (let i = 0; i < options.files.length; i++) {
|
|
69
|
+
const f = options.files[i];
|
|
70
|
+
const blob = new Blob([f.data]);
|
|
71
|
+
form.append(`files[${i}]`, blob, f.filename ?? f.name);
|
|
72
|
+
}
|
|
73
|
+
body = form;
|
|
74
|
+
// Don't set Content-Type — fetch sets it with boundary for FormData
|
|
75
|
+
}
|
|
76
|
+
else if (options?.body) {
|
|
77
|
+
headers['Content-Type'] = 'application/json';
|
|
78
|
+
body = JSON.stringify(options.body);
|
|
79
|
+
}
|
|
80
|
+
const res = await fetch(url, { method, headers, body });
|
|
81
|
+
// Rate limited
|
|
82
|
+
if (res.status === 429) {
|
|
83
|
+
const retryAfter = parseFloat(res.headers.get('retry-after') ?? '1') * 1000;
|
|
84
|
+
if (attempt < this.maxRetries) {
|
|
85
|
+
await sleep(retryAfter + jitter());
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
throw new RateLimitError(retryAfter, method, path);
|
|
89
|
+
}
|
|
90
|
+
// Server error — retry
|
|
91
|
+
if (res.status >= 500 && attempt < this.maxRetries) {
|
|
92
|
+
await sleep(1000 * (attempt + 1) + jitter());
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (!res.ok) {
|
|
96
|
+
const errBody = await res.json().catch(() => res.text());
|
|
97
|
+
throw new FluxerAPIError(res.status, errBody, method, path);
|
|
98
|
+
}
|
|
99
|
+
// 204 No Content
|
|
100
|
+
if (res.status === 204)
|
|
101
|
+
return undefined;
|
|
102
|
+
return res.json();
|
|
103
|
+
}
|
|
104
|
+
throw new Error(`Max retries exceeded for ${method} ${path}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function sleep(ms) {
|
|
108
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
109
|
+
}
|
|
110
|
+
function jitter() {
|
|
111
|
+
return Math.random() * 500;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=rest.js.map
|
package/dist/rest.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"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"}
|
package/dist/routes.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Snowflake } from './types.js';
|
|
2
|
+
/** REST API route builders — all relative to /v1 */
|
|
3
|
+
export declare const Routes: {
|
|
4
|
+
readonly channel: (id: Snowflake) => `/channels/${string}`;
|
|
5
|
+
readonly channelMessages: (id: Snowflake) => `/channels/${string}/messages`;
|
|
6
|
+
readonly channelMessage: (chId: Snowflake, msgId: Snowflake) => `/channels/${string}/messages/${string}`;
|
|
7
|
+
readonly channelMessageAttachment: (chId: Snowflake, msgId: Snowflake, attId: Snowflake) => `/channels/${string}/messages/${string}/attachments/${string}`;
|
|
8
|
+
readonly channelMessageReactions: (chId: Snowflake, msgId: Snowflake) => `/channels/${string}/messages/${string}/reactions`;
|
|
9
|
+
readonly channelMessageReaction: (chId: Snowflake, msgId: Snowflake, emoji: string) => `/channels/${string}/messages/${string}/reactions/${string}`;
|
|
10
|
+
readonly channelPins: (id: Snowflake) => `/channels/${string}/messages/pins`;
|
|
11
|
+
readonly channelPin: (chId: Snowflake, msgId: Snowflake) => `/channels/${string}/pins/${string}`;
|
|
12
|
+
readonly channelBulkDelete: (id: Snowflake) => `/channels/${string}/messages/bulk-delete`;
|
|
13
|
+
readonly channelWebhooks: (id: Snowflake) => `/channels/${string}/webhooks`;
|
|
14
|
+
readonly channelTyping: (id: Snowflake) => `/channels/${string}/typing`;
|
|
15
|
+
readonly channelInvites: (id: Snowflake) => `/channels/${string}/invites`;
|
|
16
|
+
readonly channelPermission: (chId: Snowflake, ovId: Snowflake) => `/channels/${string}/permissions/${string}`;
|
|
17
|
+
readonly guilds: () => "/guilds";
|
|
18
|
+
readonly guild: (id: Snowflake) => `/guilds/${string}`;
|
|
19
|
+
readonly guildChannels: (id: Snowflake) => `/guilds/${string}/channels`;
|
|
20
|
+
readonly guildMembers: (id: Snowflake) => `/guilds/${string}/members`;
|
|
21
|
+
readonly guildMember: (gId: Snowflake, uId: Snowflake) => `/guilds/${string}/members/${string}`;
|
|
22
|
+
readonly guildMemberRole: (gId: Snowflake, uId: Snowflake, rId: Snowflake) => `/guilds/${string}/members/${string}/roles/${string}`;
|
|
23
|
+
readonly guildRoles: (id: Snowflake) => `/guilds/${string}/roles`;
|
|
24
|
+
readonly guildRole: (gId: Snowflake, rId: Snowflake) => `/guilds/${string}/roles/${string}`;
|
|
25
|
+
readonly guildBans: (id: Snowflake) => `/guilds/${string}/bans`;
|
|
26
|
+
readonly guildBan: (gId: Snowflake, uId: Snowflake) => `/guilds/${string}/bans/${string}`;
|
|
27
|
+
readonly guildInvites: (id: Snowflake) => `/guilds/${string}/invites`;
|
|
28
|
+
readonly guildAuditLogs: (id: Snowflake) => `/guilds/${string}/audit-logs`;
|
|
29
|
+
readonly guildEmojis: (id: Snowflake) => `/guilds/${string}/emojis`;
|
|
30
|
+
readonly guildEmoji: (gId: Snowflake, eId: Snowflake) => `/guilds/${string}/emojis/${string}`;
|
|
31
|
+
readonly guildStickers: (id: Snowflake) => `/guilds/${string}/stickers`;
|
|
32
|
+
readonly guildSticker: (gId: Snowflake, sId: Snowflake) => `/guilds/${string}/stickers/${string}`;
|
|
33
|
+
readonly guildWebhooks: (id: Snowflake) => `/guilds/${string}/webhooks`;
|
|
34
|
+
readonly guildVanityUrl: (id: Snowflake) => `/guilds/${string}/vanity-url`;
|
|
35
|
+
readonly invite: (code: string) => `/invites/${string}`;
|
|
36
|
+
readonly webhook: (id: Snowflake) => `/webhooks/${string}`;
|
|
37
|
+
readonly webhookExecute: (id: Snowflake, token: string) => `/webhooks/${string}/${string}`;
|
|
38
|
+
readonly webhookMessage: (id: Snowflake, token: string, msgId: Snowflake) => `/webhooks/${string}/${string}/messages/${string}`;
|
|
39
|
+
readonly user: (id: Snowflake) => `/users/${string}`;
|
|
40
|
+
readonly currentUser: () => "/users/@me";
|
|
41
|
+
readonly currentUserGuilds: () => "/users/@me/guilds";
|
|
42
|
+
readonly leaveGuild: (gId: Snowflake) => `/users/@me/guilds/${string}`;
|
|
43
|
+
readonly userChannels: () => "/users/@me/channels";
|
|
44
|
+
readonly userProfile: (id: Snowflake, guildId?: Snowflake) => string;
|
|
45
|
+
readonly applicationCommands: (appId: Snowflake) => `/applications/${string}/commands`;
|
|
46
|
+
readonly applicationCommand: (appId: Snowflake, cmdId: Snowflake) => `/applications/${string}/commands/${string}`;
|
|
47
|
+
readonly interactionCallback: (intId: Snowflake, token: string) => `/interactions/${string}/${string}/callback`;
|
|
48
|
+
readonly gatewayBot: () => "/gateway/bot";
|
|
49
|
+
readonly instance: () => "/instance";
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,oDAAoD;AACpD,eAAO,MAAM,MAAM;2BAEH,SAAS;mCACD,SAAS;oCACR,SAAS,SAAS,SAAS;8CACjB,SAAS,SAAS,SAAS,SAAS,SAAS;6CAC9C,SAAS,SAAS,SAAS;4CAC5B,SAAS,SAAS,SAAS,SAAS,MAAM;+BACvD,SAAS;gCACR,SAAS,SAAS,SAAS;qCACtB,SAAS;mCACX,SAAS;iCACX,SAAS;kCACR,SAAS;uCACJ,SAAS,QAAQ,SAAS;;yBAIxC,SAAS;iCACD,SAAS;gCACV,SAAS;gCACT,SAAS,OAAO,SAAS;oCACrB,SAAS,OAAO,SAAS,OAAO,SAAS;8BAC/C,SAAS;8BACT,SAAS,OAAO,SAAS;6BAC1B,SAAS;6BACT,SAAS,OAAO,SAAS;gCACtB,SAAS;kCACP,SAAS;+BACZ,SAAS;+BACT,SAAS,OAAO,SAAS;iCACvB,SAAS;iCACT,SAAS,OAAO,SAAS;iCACzB,SAAS;kCACR,SAAS;4BAGf,MAAM;2BAGP,SAAS;kCACF,SAAS,SAAS,MAAM;kCACxB,SAAS,SAAS,MAAM,SAAS,SAAS;wBAGpD,SAAS;;;+BAGF,SAAS;;+BAET,SAAS,YAAY,SAAS;0CAGnB,SAAS;yCACV,SAAS,SAAS,SAAS;0CAC1B,SAAS,SAAS,MAAM;;;CAO7C,CAAC"}
|
package/dist/routes.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** REST API route builders — all relative to /v1 */
|
|
2
|
+
export const Routes = {
|
|
3
|
+
// Channels
|
|
4
|
+
channel: (id) => `/channels/${id}`,
|
|
5
|
+
channelMessages: (id) => `/channels/${id}/messages`,
|
|
6
|
+
channelMessage: (chId, msgId) => `/channels/${chId}/messages/${msgId}`,
|
|
7
|
+
channelMessageAttachment: (chId, msgId, attId) => `/channels/${chId}/messages/${msgId}/attachments/${attId}`,
|
|
8
|
+
channelMessageReactions: (chId, msgId) => `/channels/${chId}/messages/${msgId}/reactions`,
|
|
9
|
+
channelMessageReaction: (chId, msgId, emoji) => `/channels/${chId}/messages/${msgId}/reactions/${encodeURIComponent(emoji)}`,
|
|
10
|
+
channelPins: (id) => `/channels/${id}/messages/pins`,
|
|
11
|
+
channelPin: (chId, msgId) => `/channels/${chId}/pins/${msgId}`,
|
|
12
|
+
channelBulkDelete: (id) => `/channels/${id}/messages/bulk-delete`,
|
|
13
|
+
channelWebhooks: (id) => `/channels/${id}/webhooks`,
|
|
14
|
+
channelTyping: (id) => `/channels/${id}/typing`,
|
|
15
|
+
channelInvites: (id) => `/channels/${id}/invites`,
|
|
16
|
+
channelPermission: (chId, ovId) => `/channels/${chId}/permissions/${ovId}`,
|
|
17
|
+
// Guilds
|
|
18
|
+
guilds: () => '/guilds',
|
|
19
|
+
guild: (id) => `/guilds/${id}`,
|
|
20
|
+
guildChannels: (id) => `/guilds/${id}/channels`,
|
|
21
|
+
guildMembers: (id) => `/guilds/${id}/members`,
|
|
22
|
+
guildMember: (gId, uId) => `/guilds/${gId}/members/${uId}`,
|
|
23
|
+
guildMemberRole: (gId, uId, rId) => `/guilds/${gId}/members/${uId}/roles/${rId}`,
|
|
24
|
+
guildRoles: (id) => `/guilds/${id}/roles`,
|
|
25
|
+
guildRole: (gId, rId) => `/guilds/${gId}/roles/${rId}`,
|
|
26
|
+
guildBans: (id) => `/guilds/${id}/bans`,
|
|
27
|
+
guildBan: (gId, uId) => `/guilds/${gId}/bans/${uId}`,
|
|
28
|
+
guildInvites: (id) => `/guilds/${id}/invites`,
|
|
29
|
+
guildAuditLogs: (id) => `/guilds/${id}/audit-logs`,
|
|
30
|
+
guildEmojis: (id) => `/guilds/${id}/emojis`,
|
|
31
|
+
guildEmoji: (gId, eId) => `/guilds/${gId}/emojis/${eId}`,
|
|
32
|
+
guildStickers: (id) => `/guilds/${id}/stickers`,
|
|
33
|
+
guildSticker: (gId, sId) => `/guilds/${gId}/stickers/${sId}`,
|
|
34
|
+
guildWebhooks: (id) => `/guilds/${id}/webhooks`,
|
|
35
|
+
guildVanityUrl: (id) => `/guilds/${id}/vanity-url`,
|
|
36
|
+
// Invites
|
|
37
|
+
invite: (code) => `/invites/${code}`,
|
|
38
|
+
// Webhooks
|
|
39
|
+
webhook: (id) => `/webhooks/${id}`,
|
|
40
|
+
webhookExecute: (id, token) => `/webhooks/${id}/${token}`,
|
|
41
|
+
webhookMessage: (id, token, msgId) => `/webhooks/${id}/${token}/messages/${msgId}`,
|
|
42
|
+
// Users
|
|
43
|
+
user: (id) => `/users/${id}`,
|
|
44
|
+
currentUser: () => '/users/@me',
|
|
45
|
+
currentUserGuilds: () => '/users/@me/guilds',
|
|
46
|
+
leaveGuild: (gId) => `/users/@me/guilds/${gId}`,
|
|
47
|
+
userChannels: () => '/users/@me/channels',
|
|
48
|
+
userProfile: (id, guildId) => `/users/${id}/profile${guildId ? `?guild_id=${guildId}` : ''}`,
|
|
49
|
+
// Applications / Interactions
|
|
50
|
+
applicationCommands: (appId) => `/applications/${appId}/commands`,
|
|
51
|
+
applicationCommand: (appId, cmdId) => `/applications/${appId}/commands/${cmdId}`,
|
|
52
|
+
interactionCallback: (intId, token) => `/interactions/${intId}/${token}/callback`,
|
|
53
|
+
// Gateway
|
|
54
|
+
gatewayBot: () => '/gateway/bot',
|
|
55
|
+
// Instance
|
|
56
|
+
instance: () => '/instance',
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|