@nerimity/nerimity.js 1.19.0 → 1.20.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/build/AsyncFunctionQueue.d.ts +43 -0
- package/build/AsyncFunctionQueue.d.ts.map +1 -0
- package/build/AsyncFunctionQueue.js +105 -0
- package/build/AsyncFunctionQueue.js.map +1 -0
- package/build/Attachment.d.ts +8 -0
- package/build/Attachment.d.ts.map +1 -0
- package/build/Attachment.js +41 -0
- package/build/Attachment.js.map +1 -0
- package/build/Client.d.ts +233 -121
- package/build/Client.d.ts.map +1 -1
- package/build/Client.js +211 -7
- package/build/Client.js.map +1 -1
- package/build/Webhooks.d.ts +73 -0
- package/build/Webhooks.d.ts.map +1 -0
- package/build/Webhooks.js +122 -0
- package/build/Webhooks.js.map +1 -0
- package/build/classes/Button.d.ts +19 -0
- package/build/classes/Button.d.ts.map +1 -0
- package/build/classes/Button.js +29 -0
- package/build/classes/Button.js.map +1 -0
- package/build/classes/Channel.d.ts +2 -0
- package/build/classes/Channel.d.ts.map +1 -1
- package/build/classes/Channel.js +16 -12
- package/build/classes/Channel.js.map +1 -1
- package/build/classes/Message.d.ts +1 -0
- package/build/classes/Message.d.ts.map +1 -1
- package/build/classes/Message.js +1 -0
- package/build/classes/Message.js.map +1 -1
- package/build/classes/Webhooks.d.ts.map +1 -1
- package/build/classes/Webhooks.js +6 -1
- package/build/classes/Webhooks.js.map +1 -1
- package/build/services/MessageService.d.ts +1 -0
- package/build/services/MessageService.d.ts.map +1 -1
- package/build/services/MessageService.js +18 -24
- package/build/services/MessageService.js.map +1 -1
- package/build/services/PostsService.d.ts.map +1 -1
- package/build/services/PostsService.js +0 -8
- package/build/services/PostsService.js.map +1 -1
- package/build/services/ServerService.d.ts.map +1 -1
- package/build/services/ServerService.js +0 -6
- package/build/services/ServerService.js.map +1 -1
- package/package.json +1 -2
- package/src/AsyncFunctionQueue.ts +115 -0
- package/src/classes/Channel.ts +17 -12
- package/src/classes/Message.ts +2 -0
- package/src/classes/Webhooks.ts +8 -1
- package/src/services/MessageService.ts +19 -24
- package/src/services/PostsService.ts +0 -8
- package/src/services/ServerService.ts +0 -6
package/src/classes/Channel.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AsyncFunctionQueue } from "../AsyncFunctionQueue";
|
|
1
2
|
import { ChannelType, RawChannel } from "../RawData";
|
|
2
3
|
import {
|
|
3
4
|
deleteMessage as requestMessageDelete,
|
|
@@ -11,6 +12,8 @@ export class Channel {
|
|
|
11
12
|
client: Client;
|
|
12
13
|
id: string;
|
|
13
14
|
|
|
15
|
+
messageSendQueue = new AsyncFunctionQueue();
|
|
16
|
+
|
|
14
17
|
type: ChannelType;
|
|
15
18
|
createdAt?: number;
|
|
16
19
|
lastMessagedAt?: number;
|
|
@@ -26,19 +29,21 @@ export class Channel {
|
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
async send(content: string, opts?: MessageOpts) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
return this.messageSendQueue.add(async () => {
|
|
33
|
+
const RawMessage = await postMessage({
|
|
34
|
+
client: this.client,
|
|
35
|
+
channelId: this.id,
|
|
36
|
+
content: content,
|
|
37
|
+
silent: opts?.silent,
|
|
38
|
+
nerimityCdnFileId: opts?.nerimityCdnFileId,
|
|
39
|
+
htmlEmbed: opts?.htmlEmbed,
|
|
40
|
+
buttons: opts?.buttons,
|
|
41
|
+
replyToMessageIds: opts?.replyToMessageIds,
|
|
42
|
+
mentionReplies: opts?.mentionReplies,
|
|
43
|
+
});
|
|
44
|
+
const message = new Message(this.client, RawMessage);
|
|
45
|
+
return message;
|
|
39
46
|
});
|
|
40
|
-
const message = new Message(this.client, RawMessage);
|
|
41
|
-
return message;
|
|
42
47
|
}
|
|
43
48
|
toString() {
|
|
44
49
|
return `[#:${this.id}]`;
|
package/src/classes/Message.ts
CHANGED
|
@@ -59,6 +59,7 @@ export interface MessageOpts {
|
|
|
59
59
|
}
|
|
60
60
|
interface EditMessageOpts {
|
|
61
61
|
htmlEmbed?: string;
|
|
62
|
+
buttons?: RawMessageButton[];
|
|
62
63
|
}
|
|
63
64
|
export class Message {
|
|
64
65
|
client: Client;
|
|
@@ -136,6 +137,7 @@ export class Message {
|
|
|
136
137
|
messageId: this.id,
|
|
137
138
|
content: content,
|
|
138
139
|
htmlEmbed: opts?.htmlEmbed,
|
|
140
|
+
buttons: opts?.buttons,
|
|
139
141
|
});
|
|
140
142
|
const message = new Message(this.client, RawMessage);
|
|
141
143
|
return message;
|
package/src/classes/Webhooks.ts
CHANGED
|
@@ -116,6 +116,9 @@ export class WebhookBuilder {
|
|
|
116
116
|
* @throws If the request fails, is unauthorized, or returns invalid JSON.
|
|
117
117
|
*/
|
|
118
118
|
public async send(content: string): Promise<any> {
|
|
119
|
+
const error = new Error();
|
|
120
|
+
Error.captureStackTrace(error, this.send);
|
|
121
|
+
|
|
119
122
|
const url = `https://nerimity.com/api/webhooks/${this.channelId}/${this.token}`;
|
|
120
123
|
|
|
121
124
|
try {
|
|
@@ -138,7 +141,11 @@ export class WebhookBuilder {
|
|
|
138
141
|
|
|
139
142
|
return json;
|
|
140
143
|
} catch (err: any) {
|
|
141
|
-
|
|
144
|
+
const message = err.message || err;
|
|
145
|
+
error.message = `Failed to send webhook: ${message}`;
|
|
146
|
+
(error as any).raw = message;
|
|
147
|
+
|
|
148
|
+
throw error;
|
|
142
149
|
}
|
|
143
150
|
}
|
|
144
151
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Client } from "../classes/Client";
|
|
2
2
|
import { RawMessage, RawMessageButton } from "../RawData";
|
|
3
3
|
import { ServiceEndpoints } from "./serviceEndpoints";
|
|
4
|
-
import fetch from "node-fetch";
|
|
5
4
|
|
|
6
5
|
interface FetchMessageOpts {
|
|
7
6
|
client: Client;
|
|
@@ -16,12 +15,6 @@ export async function fetchMessage(opts: FetchMessageOpts) {
|
|
|
16
15
|
method: "GET",
|
|
17
16
|
|
|
18
17
|
useToken: true,
|
|
19
|
-
}).catch((err) => {
|
|
20
|
-
const error = new Error(
|
|
21
|
-
`Failed to get message. ${JSON.stringify(err.message)}`
|
|
22
|
-
);
|
|
23
|
-
(error as unknown as { raw: string }).raw = err.message;
|
|
24
|
-
throw error;
|
|
25
18
|
});
|
|
26
19
|
}
|
|
27
20
|
|
|
@@ -52,12 +45,6 @@ export async function postMessage(opts: PostMessageOpts) {
|
|
|
52
45
|
replyToMessageIds: opts.replyToMessageIds,
|
|
53
46
|
},
|
|
54
47
|
useToken: true,
|
|
55
|
-
}).catch((err) => {
|
|
56
|
-
const error = new Error(
|
|
57
|
-
`Failed to send message. ${JSON.stringify(err.message)}`
|
|
58
|
-
);
|
|
59
|
-
(error as unknown as { raw: string }).raw = err.message;
|
|
60
|
-
throw error;
|
|
61
48
|
});
|
|
62
49
|
}
|
|
63
50
|
|
|
@@ -67,6 +54,7 @@ interface EditMessageOpts {
|
|
|
67
54
|
messageId: string;
|
|
68
55
|
content: string;
|
|
69
56
|
htmlEmbed?: string;
|
|
57
|
+
buttons?: RawMessageButton[];
|
|
70
58
|
}
|
|
71
59
|
|
|
72
60
|
export function editMessage(opts: EditMessageOpts) {
|
|
@@ -74,10 +62,12 @@ export function editMessage(opts: EditMessageOpts) {
|
|
|
74
62
|
client: opts.client,
|
|
75
63
|
url: ServiceEndpoints.EditMessage(opts.channelId, opts.messageId),
|
|
76
64
|
method: "PATCH",
|
|
77
|
-
body: {
|
|
65
|
+
body: {
|
|
66
|
+
content: opts.content,
|
|
67
|
+
htmlEmbed: opts.htmlEmbed,
|
|
68
|
+
buttons: opts.buttons,
|
|
69
|
+
},
|
|
78
70
|
useToken: true,
|
|
79
|
-
}).catch((err) => {
|
|
80
|
-
throw err.message;
|
|
81
71
|
});
|
|
82
72
|
}
|
|
83
73
|
|
|
@@ -92,8 +82,6 @@ export function deleteMessage(opts: DeleteMessageOpts) {
|
|
|
92
82
|
url: ServiceEndpoints.EditMessage(opts.channelId, opts.messageId),
|
|
93
83
|
method: "DELETE",
|
|
94
84
|
useToken: true,
|
|
95
|
-
}).catch((err) => {
|
|
96
|
-
throw err.message;
|
|
97
85
|
});
|
|
98
86
|
}
|
|
99
87
|
|
|
@@ -168,8 +156,6 @@ export function buttonClickCallback(opts: ButtonClickCallbackOpts) {
|
|
|
168
156
|
userId: opts.userId,
|
|
169
157
|
},
|
|
170
158
|
useToken: true,
|
|
171
|
-
}).catch((err) => {
|
|
172
|
-
throw err.message;
|
|
173
159
|
});
|
|
174
160
|
}
|
|
175
161
|
|
|
@@ -184,6 +170,9 @@ interface RequestOpts {
|
|
|
184
170
|
}
|
|
185
171
|
|
|
186
172
|
export async function request<T>(opts: RequestOpts): Promise<T> {
|
|
173
|
+
const stackCapture: any = {};
|
|
174
|
+
Error.captureStackTrace(stackCapture, request);
|
|
175
|
+
|
|
187
176
|
const url = new URL(opts.url);
|
|
188
177
|
url.search = new URLSearchParams(opts.params || {}).toString();
|
|
189
178
|
|
|
@@ -195,7 +184,7 @@ export async function request<T>(opts: RequestOpts): Promise<T> {
|
|
|
195
184
|
Authorization: opts.useToken ? opts.client.token! : "",
|
|
196
185
|
},
|
|
197
186
|
}).catch((err) => {
|
|
198
|
-
throw
|
|
187
|
+
throw new Error("Could not connect to server. " + err.message);
|
|
199
188
|
});
|
|
200
189
|
|
|
201
190
|
const text = await response.text();
|
|
@@ -204,10 +193,16 @@ export async function request<T>(opts: RequestOpts): Promise<T> {
|
|
|
204
193
|
try {
|
|
205
194
|
const json = JSON.parse(text);
|
|
206
195
|
if (!response.ok) {
|
|
207
|
-
|
|
196
|
+
throw new Error(JSON.stringify(json));
|
|
208
197
|
}
|
|
209
198
|
return json;
|
|
210
|
-
} catch {
|
|
211
|
-
|
|
199
|
+
} catch (err) {
|
|
200
|
+
if (err instanceof Error) {
|
|
201
|
+
// Remove the first line of the captured stack ("Error")
|
|
202
|
+
// and append the rest to the real error
|
|
203
|
+
const originalStack = stackCapture.stack?.split("\n").slice(1).join("\n");
|
|
204
|
+
err.stack += "\n -- caused by --\n" + originalStack;
|
|
205
|
+
}
|
|
206
|
+
throw err;
|
|
212
207
|
}
|
|
213
208
|
}
|
|
@@ -30,8 +30,6 @@ export async function getPosts(client: Client) {
|
|
|
30
30
|
url: ServiceEndpoints.GetPosts(),
|
|
31
31
|
method: "GET",
|
|
32
32
|
useToken: true,
|
|
33
|
-
}).catch((err) => {
|
|
34
|
-
throw new Error(`Failed to get posts. ${err.message}`);
|
|
35
33
|
});
|
|
36
34
|
}
|
|
37
35
|
|
|
@@ -46,8 +44,6 @@ export async function postPost(opts: PostPostOpts) {
|
|
|
46
44
|
poll: opts.poll,
|
|
47
45
|
},
|
|
48
46
|
useToken: true,
|
|
49
|
-
}).catch((err) => {
|
|
50
|
-
throw new Error(`Failed to send post. ${err.message}`);
|
|
51
47
|
});
|
|
52
48
|
}
|
|
53
49
|
|
|
@@ -58,8 +54,6 @@ export async function editPost(opts: EditPostOpts) {
|
|
|
58
54
|
method: "PATCH",
|
|
59
55
|
body: { content: opts.content },
|
|
60
56
|
useToken: true,
|
|
61
|
-
}).catch((err) => {
|
|
62
|
-
throw new Error(`Failed to edit post. ${err.message}`);
|
|
63
57
|
});
|
|
64
58
|
}
|
|
65
59
|
|
|
@@ -69,7 +63,5 @@ export async function deletePost(opts: DeletePostOpts) {
|
|
|
69
63
|
url: ServiceEndpoints.DeletePost(opts.postId),
|
|
70
64
|
method: "DELETE",
|
|
71
65
|
useToken: true,
|
|
72
|
-
}).catch((err) => {
|
|
73
|
-
throw new Error(`Failed to delete post. ${err.message}`);
|
|
74
66
|
});
|
|
75
67
|
}
|
|
@@ -14,8 +14,6 @@ export async function banServerMember(
|
|
|
14
14
|
method: "POST",
|
|
15
15
|
useToken: true,
|
|
16
16
|
body: { reason },
|
|
17
|
-
}).catch((err) => {
|
|
18
|
-
throw new Error(`Failed to ban server member. ${err.message}`);
|
|
19
17
|
});
|
|
20
18
|
}
|
|
21
19
|
|
|
@@ -29,8 +27,6 @@ export async function unbanServerMember(
|
|
|
29
27
|
url: ServiceEndpoints.serverMemberBan(serverId, userId),
|
|
30
28
|
method: "DELETE",
|
|
31
29
|
useToken: true,
|
|
32
|
-
}).catch((err) => {
|
|
33
|
-
throw new Error(`Failed to unban server member. ${err.message}`);
|
|
34
30
|
});
|
|
35
31
|
}
|
|
36
32
|
export async function kickServerMember(
|
|
@@ -43,7 +39,5 @@ export async function kickServerMember(
|
|
|
43
39
|
url: ServiceEndpoints.serverMemberKick(serverId, userId),
|
|
44
40
|
method: "DELETE",
|
|
45
41
|
useToken: true,
|
|
46
|
-
}).catch((err) => {
|
|
47
|
-
throw new Error(`Failed to kick server member. ${err.message}`);
|
|
48
42
|
});
|
|
49
43
|
}
|