@buape/carbon 0.5.0 → 0.6.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/dist/package.json +22 -5
- package/dist/src/abstracts/BaseInteraction.d.ts +3 -1
- package/dist/src/abstracts/BaseInteraction.d.ts.map +1 -1
- package/dist/src/abstracts/BaseInteraction.js +13 -7
- package/dist/src/abstracts/BaseInteraction.js.map +1 -1
- package/dist/src/abstracts/Plugin.d.ts +14 -0
- package/dist/src/abstracts/Plugin.d.ts.map +1 -0
- package/dist/src/abstracts/Plugin.js +4 -0
- package/dist/src/abstracts/Plugin.js.map +1 -0
- package/dist/src/adapters/bun/index.d.ts +16 -0
- package/dist/src/adapters/bun/index.d.ts.map +1 -0
- package/dist/src/adapters/bun/index.js +20 -0
- package/dist/src/adapters/bun/index.js.map +1 -0
- package/dist/src/adapters/cloudflare/index.d.ts +16 -0
- package/dist/src/adapters/cloudflare/index.d.ts.map +1 -0
- package/dist/src/adapters/cloudflare/index.js +17 -0
- package/dist/src/adapters/cloudflare/index.js.map +1 -0
- package/dist/src/adapters/next/index.d.ts +14 -0
- package/dist/src/adapters/next/index.d.ts.map +1 -0
- package/dist/src/adapters/next/index.js +17 -0
- package/dist/src/adapters/next/index.js.map +1 -0
- package/dist/src/adapters/node/index.d.ts +16 -0
- package/dist/src/adapters/node/index.d.ts.map +1 -0
- package/dist/src/adapters/node/index.js +20 -0
- package/dist/src/adapters/node/index.js.map +1 -0
- package/dist/src/adapters/shared.d.ts +10 -0
- package/dist/src/adapters/shared.d.ts.map +1 -0
- package/dist/src/adapters/shared.js +2 -0
- package/dist/src/adapters/shared.js.map +1 -0
- package/dist/src/classes/Client.d.ts +37 -59
- package/dist/src/classes/Client.d.ts.map +1 -1
- package/dist/src/classes/Client.js +74 -112
- package/dist/src/classes/Client.js.map +1 -1
- package/dist/src/classes/Embed.d.ts +2 -1
- package/dist/src/classes/Embed.d.ts.map +1 -1
- package/dist/src/classes/Embed.js +12 -10
- package/dist/src/classes/Embed.js.map +1 -1
- package/dist/src/createHandle.d.ts +20 -0
- package/dist/src/createHandle.d.ts.map +1 -0
- package/dist/src/createHandle.js +57 -0
- package/dist/src/createHandle.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/internals/ModalInteraction.d.ts +1 -1
- package/dist/src/internals/ModalInteraction.d.ts.map +1 -1
- package/dist/src/internals/ModalInteraction.js +1 -1
- package/dist/src/internals/ModalInteraction.js.map +1 -1
- package/dist/src/plugins/linked-roles/LinkedRoles.d.ts +61 -0
- package/dist/src/plugins/linked-roles/LinkedRoles.d.ts.map +1 -0
- package/dist/src/plugins/linked-roles/LinkedRoles.js +196 -0
- package/dist/src/plugins/linked-roles/LinkedRoles.js.map +1 -0
- package/dist/src/plugins/linked-roles/index.d.ts +3 -0
- package/dist/src/plugins/linked-roles/index.d.ts.map +1 -0
- package/dist/src/plugins/linked-roles/index.js +3 -0
- package/dist/src/plugins/linked-roles/index.js.map +1 -0
- package/dist/src/plugins/linked-roles/types.d.ts +94 -0
- package/dist/src/plugins/linked-roles/types.d.ts.map +1 -0
- package/dist/src/plugins/linked-roles/types.js +39 -0
- package/dist/src/plugins/linked-roles/types.js.map +1 -0
- package/dist/src/utils.d.ts +4 -3
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +15 -13
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RequestClient } from "@buape/carbon-request";
|
|
2
2
|
import { InteractionResponseType, InteractionType, Routes } from "discord-api-types/v10";
|
|
3
|
-
import {
|
|
3
|
+
import { Plugin } from "../abstracts/Plugin.js";
|
|
4
4
|
import { channelFactory } from "../factories/channelFactory.js";
|
|
5
5
|
import { CommandHandler } from "../internals/CommandHandler.js";
|
|
6
6
|
import { ComponentHandler } from "../internals/ComponentHandler.js";
|
|
@@ -10,22 +10,10 @@ import { GuildMember } from "../structures/GuildMember.js";
|
|
|
10
10
|
import { Role } from "../structures/Role.js";
|
|
11
11
|
import { User } from "../structures/User.js";
|
|
12
12
|
import { concatUint8Arrays, subtleCrypto, valueToUint8Array } from "../utils.js";
|
|
13
|
-
/**
|
|
14
|
-
* The mode that the client is running in.
|
|
15
|
-
* Different platforms have different requirements for how processes are handled.
|
|
16
|
-
*/
|
|
17
|
-
export var ClientMode;
|
|
18
|
-
(function (ClientMode) {
|
|
19
|
-
ClientMode["NodeJS"] = "node";
|
|
20
|
-
ClientMode["CloudflareWorkers"] = "cloudflare";
|
|
21
|
-
ClientMode["Bun"] = "bun";
|
|
22
|
-
ClientMode["Vercel"] = "vercel";
|
|
23
|
-
ClientMode["Web"] = "web";
|
|
24
|
-
})(ClientMode || (ClientMode = {}));
|
|
25
13
|
/**
|
|
26
14
|
* The main client used to interact with Discord
|
|
27
15
|
*/
|
|
28
|
-
export class Client {
|
|
16
|
+
export class Client extends Plugin {
|
|
29
17
|
/**
|
|
30
18
|
* The options used to initialize the client
|
|
31
19
|
*/
|
|
@@ -34,10 +22,6 @@ export class Client {
|
|
|
34
22
|
* The commands that the client has registered
|
|
35
23
|
*/
|
|
36
24
|
commands;
|
|
37
|
-
/**
|
|
38
|
-
* The router used to handle requests
|
|
39
|
-
*/
|
|
40
|
-
router;
|
|
41
25
|
/**
|
|
42
26
|
* The rest client used to interact with the Discord API
|
|
43
27
|
*/
|
|
@@ -63,6 +47,11 @@ export class Client {
|
|
|
63
47
|
* @param commands The commands that the client has registered
|
|
64
48
|
*/
|
|
65
49
|
constructor(options, commands) {
|
|
50
|
+
super();
|
|
51
|
+
if (!options.baseUrl)
|
|
52
|
+
throw new Error("Missing base URL");
|
|
53
|
+
if (!options.clientSecret)
|
|
54
|
+
throw new Error("Missing client secret");
|
|
66
55
|
if (!options.clientId)
|
|
67
56
|
throw new Error("Missing client ID");
|
|
68
57
|
if (!options.publicKey)
|
|
@@ -71,16 +60,12 @@ export class Client {
|
|
|
71
60
|
throw new Error("Missing token");
|
|
72
61
|
this.options = options;
|
|
73
62
|
this.commands = commands;
|
|
63
|
+
this.appendRoutes();
|
|
74
64
|
this.commandHandler = new CommandHandler(this);
|
|
75
65
|
this.componentHandler = new ComponentHandler(this);
|
|
76
66
|
this.modalHandler = new ModalHandler(this);
|
|
77
|
-
const routerData = this.options.mode === ClientMode.Bun && this.options.port
|
|
78
|
-
? { port: this.options.port }
|
|
79
|
-
: {};
|
|
80
|
-
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
81
|
-
this.router = AutoRouter(routerData);
|
|
82
67
|
this.rest = new RequestClient(options.token, options.requestOptions);
|
|
83
|
-
if (this.options.
|
|
68
|
+
if (!this.options.disableAutoRegister) {
|
|
84
69
|
for (const command of commands) {
|
|
85
70
|
for (const component of command.components)
|
|
86
71
|
this.componentHandler.registerComponent(new component());
|
|
@@ -88,114 +73,91 @@ export class Client {
|
|
|
88
73
|
this.modalHandler.registerModal(new modal());
|
|
89
74
|
}
|
|
90
75
|
}
|
|
91
|
-
if (this.options.autoDeploy)
|
|
92
|
-
this.
|
|
93
|
-
this.setupRoutes();
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Deploy the commands registered to Discord.
|
|
97
|
-
* This is automatically called when running in NodeJS mode.
|
|
98
|
-
*/
|
|
99
|
-
async deployCommands() {
|
|
100
|
-
try {
|
|
101
|
-
const commands = this.commands
|
|
102
|
-
.filter((x) => x.name !== "*")
|
|
103
|
-
.map((command) => {
|
|
104
|
-
return command.serialize();
|
|
105
|
-
});
|
|
106
|
-
await this.rest.put(Routes.applicationCommands(this.options.clientId), {
|
|
107
|
-
body: commands
|
|
108
|
-
});
|
|
109
|
-
console.log(`Deployed ${commands.length} commands to Discord`);
|
|
110
|
-
}
|
|
111
|
-
catch (err) {
|
|
112
|
-
console.error("Failed to deploy commands");
|
|
113
|
-
console.error(err);
|
|
76
|
+
if (this.options.autoDeploy) {
|
|
77
|
+
this.handleDeployRequest();
|
|
114
78
|
}
|
|
115
79
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
throw new StatusError(404);
|
|
80
|
+
appendRoutes() {
|
|
81
|
+
this.routes.push({
|
|
82
|
+
method: "GET",
|
|
83
|
+
path: "/deploy",
|
|
84
|
+
handler: this.handleDeployRequest.bind(this),
|
|
85
|
+
protected: true,
|
|
86
|
+
disabled: this.options.disableDeployRoute
|
|
124
87
|
});
|
|
125
|
-
this.
|
|
126
|
-
|
|
88
|
+
this.routes.push({
|
|
89
|
+
method: "POST",
|
|
90
|
+
path: "/interactions",
|
|
91
|
+
handler: this.handleInteractionsRequest.bind(this),
|
|
92
|
+
disabled: this.options.disableInteractionsRoute
|
|
127
93
|
});
|
|
128
94
|
}
|
|
129
95
|
/**
|
|
130
|
-
*
|
|
131
|
-
* @
|
|
132
|
-
* @param ctx Cloudflare Workers only. The execution context of the request, provided in the fetch handler from CF.
|
|
133
|
-
* @returns A response to send back to the client.
|
|
96
|
+
* Handle a request to deploy the commands to Discord
|
|
97
|
+
* @returns A response
|
|
134
98
|
*/
|
|
135
|
-
async
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
99
|
+
async handleDeployRequest() {
|
|
100
|
+
const commands = this.commands
|
|
101
|
+
.filter((c) => c.name !== "*")
|
|
102
|
+
.map((c) => c.serialize());
|
|
103
|
+
await this.rest.put(Routes.applicationCommands(this.options.clientId), //
|
|
104
|
+
{ body: commands });
|
|
105
|
+
return new Response("OK", { status: 202 });
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Handle an interaction request from Discord
|
|
109
|
+
* @param req The request to handle
|
|
110
|
+
* @param ctx The context for the request
|
|
111
|
+
* @returns A response
|
|
112
|
+
*/
|
|
113
|
+
async handleInteractionsRequest(req, ctx) {
|
|
114
|
+
const isValid = await this.validateInteractionRequest(req);
|
|
115
|
+
if (!isValid)
|
|
116
|
+
return new Response("Unauthorized", { status: 401 });
|
|
117
|
+
const interaction = (await req.json());
|
|
118
|
+
if (interaction.type === InteractionType.Ping) {
|
|
119
|
+
return Response.json({ type: InteractionResponseType.Pong });
|
|
145
120
|
}
|
|
146
|
-
if (
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
else {
|
|
153
|
-
await this.commandHandler.handleCommandInteraction(rawInteraction);
|
|
154
|
-
}
|
|
121
|
+
if (interaction.type === InteractionType.ApplicationCommand) {
|
|
122
|
+
const promise = this.commandHandler.handleCommandInteraction(interaction);
|
|
123
|
+
if (ctx?.waitUntil)
|
|
124
|
+
ctx.waitUntil(promise);
|
|
125
|
+
else
|
|
126
|
+
await promise;
|
|
155
127
|
}
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
else {
|
|
163
|
-
await this.commandHandler.handleAutocompleteInteraction(rawInteraction);
|
|
164
|
-
}
|
|
128
|
+
if (interaction.type === InteractionType.ApplicationCommandAutocomplete) {
|
|
129
|
+
const promise = this.commandHandler.handleAutocompleteInteraction(interaction);
|
|
130
|
+
if (ctx?.waitUntil)
|
|
131
|
+
ctx.waitUntil(promise);
|
|
132
|
+
else
|
|
133
|
+
await promise;
|
|
165
134
|
}
|
|
166
|
-
if (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
else {
|
|
173
|
-
await this.componentHandler.handleInteraction(rawInteraction);
|
|
174
|
-
}
|
|
135
|
+
if (interaction.type === InteractionType.MessageComponent) {
|
|
136
|
+
const promise = this.componentHandler.handleInteraction(interaction);
|
|
137
|
+
if (ctx?.waitUntil)
|
|
138
|
+
ctx.waitUntil(promise);
|
|
139
|
+
else
|
|
140
|
+
await promise;
|
|
175
141
|
}
|
|
176
|
-
if (
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
else {
|
|
183
|
-
await this.modalHandler.handleInteraction(rawInteraction);
|
|
184
|
-
}
|
|
142
|
+
if (interaction.type === InteractionType.ModalSubmit) {
|
|
143
|
+
const promise = this.modalHandler.handleInteraction(interaction);
|
|
144
|
+
if (ctx?.waitUntil)
|
|
145
|
+
ctx.waitUntil(promise);
|
|
146
|
+
else
|
|
147
|
+
await promise;
|
|
185
148
|
}
|
|
186
|
-
return new Response(
|
|
149
|
+
return new Response("OK", { status: 202 });
|
|
187
150
|
}
|
|
188
151
|
/**
|
|
189
152
|
* Validate the interaction request
|
|
190
153
|
* @param req The request to validate
|
|
191
154
|
*/
|
|
192
|
-
async
|
|
155
|
+
async validateInteractionRequest(req) {
|
|
193
156
|
const body = await req.clone().text();
|
|
194
157
|
const signature = req.headers.get("X-Signature-Ed25519");
|
|
195
158
|
const timestamp = req.headers.get("X-Signature-Timestamp");
|
|
196
|
-
if (!timestamp || !signature || req.method !== "POST" || !body)
|
|
197
|
-
|
|
198
|
-
}
|
|
159
|
+
if (!timestamp || !signature || req.method !== "POST" || !body)
|
|
160
|
+
return false;
|
|
199
161
|
try {
|
|
200
162
|
const timestampData = valueToUint8Array(timestamp);
|
|
201
163
|
const bodyData = valueToUint8Array(body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/classes/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,uBAAuB,CAAA;AAChF,OAAO,EAON,uBAAuB,EACvB,eAAe,EACf,MAAM,EACN,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/classes/Client.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,7 @@ export declare class Embed {
|
|
|
41
41
|
author?: {
|
|
42
42
|
name: string;
|
|
43
43
|
url?: string;
|
|
44
|
+
icon_url?: string;
|
|
44
45
|
};
|
|
45
46
|
fields?: {
|
|
46
47
|
name: string;
|
|
@@ -50,7 +51,7 @@ export declare class Embed {
|
|
|
50
51
|
/**
|
|
51
52
|
* Create an embed from an API embed
|
|
52
53
|
*/
|
|
53
|
-
constructor(embed
|
|
54
|
+
constructor(embed?: APIEmbed);
|
|
54
55
|
/**
|
|
55
56
|
* Serialize the embed to an API embed
|
|
56
57
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Embed.d.ts","sourceRoot":"","sources":["../../../src/classes/Embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAErD;;GAEG;AACH,qBAAa,KAAK;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IAED;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,MAAM,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Embed.d.ts","sourceRoot":"","sources":["../../../src/classes/Embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAErD;;GAEG;AACH,qBAAa,KAAK;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IAED;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,MAAM,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IAED,MAAM,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,OAAO,CAAA;KAChB,EAAE,CAAA;IAEH;;OAEG;gBACS,KAAK,CAAC,EAAE,QAAQ;IAe5B;;;OAGG;IACH,SAAS,IAAI,QAAQ;CAcrB"}
|
|
@@ -40,16 +40,18 @@ export class Embed {
|
|
|
40
40
|
* Create an embed from an API embed
|
|
41
41
|
*/
|
|
42
42
|
constructor(embed) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
43
|
+
if (embed) {
|
|
44
|
+
this.title = embed.title;
|
|
45
|
+
this.description = embed.description;
|
|
46
|
+
this.url = embed.url;
|
|
47
|
+
this.timestamp = embed.timestamp;
|
|
48
|
+
this.color = embed.color;
|
|
49
|
+
this.footer = embed.footer;
|
|
50
|
+
this.image = embed.image?.url;
|
|
51
|
+
this.thumbnail = embed.thumbnail?.url;
|
|
52
|
+
this.author = embed.author;
|
|
53
|
+
this.fields = embed.fields;
|
|
54
|
+
}
|
|
53
55
|
}
|
|
54
56
|
/**
|
|
55
57
|
* Serialize the embed to an API embed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Embed.js","sourceRoot":"","sources":["../../../src/classes/Embed.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,KAAK;IACjB;;OAEG;IACH,KAAK,CAAS;IAEd;;OAEG;IACH,WAAW,CAAS;IAEpB;;OAEG;IACH,GAAG,CAAS;IAEZ;;OAEG;IACH,SAAS,CAAS;IAElB;;OAEG;IACH,KAAK,CAAS;IAEd;;OAEG;IACH,MAAM,CAGL;IAED;;OAEG;IACH,KAAK,CAAS;IAEd;;OAEG;IACH,SAAS,CAAS;IAElB,MAAM,
|
|
1
|
+
{"version":3,"file":"Embed.js","sourceRoot":"","sources":["../../../src/classes/Embed.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,KAAK;IACjB;;OAEG;IACH,KAAK,CAAS;IAEd;;OAEG;IACH,WAAW,CAAS;IAEpB;;OAEG;IACH,GAAG,CAAS;IAEZ;;OAEG;IACH,SAAS,CAAS;IAElB;;OAEG;IACH,KAAK,CAAS;IAEd;;OAEG;IACH,MAAM,CAGL;IAED;;OAEG;IACH,KAAK,CAAS;IAEd;;OAEG;IACH,SAAS,CAAS;IAElB,MAAM,CAIL;IAED,MAAM,CAIH;IAEH;;OAEG;IACH,YAAY,KAAgB;QAC3B,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACxB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;YACpC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;YACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;YAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,CAAA;YAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,CAAA;YACrC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC3B,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,SAAS;QACR,OAAO;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;YACnD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;YAC/D,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAA;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Context, Plugin } from "./abstracts/Plugin.js";
|
|
2
|
+
import type { PartialEnv } from "./adapters/shared.js";
|
|
3
|
+
import type { Client } from "./classes/Client.js";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a handle function that can be used to handle requests
|
|
6
|
+
* @param factory The factory function that creates the plugins
|
|
7
|
+
* @returns The handle function
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const handle = createHandle((env) => {
|
|
11
|
+
* const client = new Client({ ... }, [ ... ])
|
|
12
|
+
* const linkedRoles = new LinkedRoles(client, { ... })
|
|
13
|
+
* return [client, linkedRoles]
|
|
14
|
+
* })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function createHandle<Env extends PartialEnv = PartialEnv>(factory: (env: Env) => [Client, ...Plugin[]]): Handle<Env>;
|
|
18
|
+
export type Fetch = (req: Request, ctx?: Context) => Promise<Response>;
|
|
19
|
+
export type Handle<Env extends PartialEnv = PartialEnv> = (env: Env) => Fetch;
|
|
20
|
+
//# sourceMappingURL=createHandle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHandle.d.ts","sourceRoot":"","sources":["../../src/createHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAS,MAAM,uBAAuB,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,EAC/D,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GAC1C,MAAM,CAAC,GAAG,CAAC,CAsCb;AAUD,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AACtE,MAAM,MAAM,MAAM,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a handle function that can be used to handle requests
|
|
3
|
+
* @param factory The factory function that creates the plugins
|
|
4
|
+
* @returns The handle function
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const handle = createHandle((env) => {
|
|
8
|
+
* const client = new Client({ ... }, [ ... ])
|
|
9
|
+
* const linkedRoles = new LinkedRoles(client, { ... })
|
|
10
|
+
* return [client, linkedRoles]
|
|
11
|
+
* })
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function createHandle(factory) {
|
|
15
|
+
return (env) => {
|
|
16
|
+
const [client, ...plugins] = factory(env);
|
|
17
|
+
const routes = [client, ...plugins].flatMap((plugin) => plugin.routes);
|
|
18
|
+
return async (req, ctx) => {
|
|
19
|
+
const method = req.method;
|
|
20
|
+
const url = new URL(req.url);
|
|
21
|
+
const pathname = //
|
|
22
|
+
resolveRequestPathname(new URL(client.options.baseUrl), url);
|
|
23
|
+
if (!pathname)
|
|
24
|
+
return new Response("Not Found", { status: 404 });
|
|
25
|
+
const matchedRoutesByPath = //
|
|
26
|
+
routes.filter((r) => r.path === pathname && !r.disabled);
|
|
27
|
+
const matchedRoutesByMethod = //
|
|
28
|
+
matchedRoutesByPath.filter((r) => r.method === method);
|
|
29
|
+
if (matchedRoutesByMethod.length === 0) {
|
|
30
|
+
if (matchedRoutesByPath.length > 0)
|
|
31
|
+
return new Response("Method Not Allowed", { status: 405 });
|
|
32
|
+
return new Response("Not Found", { status: 404 });
|
|
33
|
+
}
|
|
34
|
+
// Use the last matched route by method to allow for overriding
|
|
35
|
+
const route = matchedRoutesByMethod.at(-1);
|
|
36
|
+
const passedSecret = url.searchParams.get("secret");
|
|
37
|
+
if (route.protected && client.options.deploySecret !== passedSecret)
|
|
38
|
+
return new Response("Unauthorized", { status: 401 });
|
|
39
|
+
try {
|
|
40
|
+
return await route.handler(req, ctx);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error(error);
|
|
44
|
+
return new Response("Internal Server Error", { status: 500 });
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function resolveRequestPathname(baseUrl, reqUrl) {
|
|
50
|
+
// Need to use pathname only due to host name being different in Cloudflare Tunnel
|
|
51
|
+
const basePathname = baseUrl.pathname.replace(/\/$/, "");
|
|
52
|
+
const reqPathname = reqUrl.pathname.replace(/\/$/, "");
|
|
53
|
+
if (!reqPathname.startsWith(basePathname))
|
|
54
|
+
return null;
|
|
55
|
+
return reqPathname.slice(basePathname.length);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=createHandle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHandle.js","sourceRoot":"","sources":["../../src/createHandle.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAGjC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yCAAyC,CAAA;AACvD,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yCAAyC,CAAA;AACvD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uCAAuC,CAAA;AAGrD,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0CAA0C,CAAA;AACxD,cAAc,qCAAqC,CAAA;AACnD,cAAc,oBAAoB,CAAA;AAClC,cAAc,oCAAoC,CAAA;AAClD,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAG3C,cAAc,+BAA+B,CAAA;AAG7C,cAAc,wCAAwC,CAAA;AACtD,cAAc,kCAAkC,CAAA;AAChD,cAAc,6CAA6C,CAAA;AAC3D,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iDAAiD,CAAA;AAC/D,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0CAA0C,CAAA;AACxD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,0CAA0C,CAAA;AAGxD,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,0CAA0C,CAAA;AACxD,cAAc,sCAAsC,CAAA;AACpD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0CAA0C,CAAA;AACxD,cAAc,kCAAkC,CAAA;AAChD,cAAc,oCAAoC,CAAA;AAClD,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AAGpC,cAAc,uBAAuB,CAAA"}
|
package/dist/src/index.js
CHANGED
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yCAAyC,CAAA;AACvD,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yCAAyC,CAAA;AACvD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uCAAuC,CAAA;AAErD,sBAAsB;AACtB,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0CAA0C,CAAA;AACxD,cAAc,qCAAqC,CAAA;AACnD,cAAc,oBAAoB,CAAA;AAClC,cAAc,oCAAoC,CAAA;AAClD,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAE3C,wBAAwB;AACxB,cAAc,+BAA+B,CAAA;AAE7C,wBAAwB;AACxB,cAAc,wCAAwC,CAAA;AACtD,cAAc,kCAAkC,CAAA;AAChD,cAAc,6CAA6C,CAAA;AAC3D,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iDAAiD,CAAA;AAC/D,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0CAA0C,CAAA;AACxD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,0CAA0C,CAAA;AAExD,yBAAyB;AACzB,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,0CAA0C,CAAA;AACxD,cAAc,sCAAsC,CAAA;AACpD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0CAA0C,CAAA;AACxD,cAAc,kCAAkC,CAAA;AAChD,cAAc,oCAAoC,CAAA;AAClD,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AAEpC,oBAAoB;AACpB,cAAc,uBAAuB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAEjC,wBAAwB;AACxB,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yCAAyC,CAAA;AACvD,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yCAAyC,CAAA;AACvD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uCAAuC,CAAA;AAErD,sBAAsB;AACtB,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0CAA0C,CAAA;AACxD,cAAc,qCAAqC,CAAA;AACnD,cAAc,oBAAoB,CAAA;AAClC,cAAc,oCAAoC,CAAA;AAClD,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAE3C,wBAAwB;AACxB,cAAc,+BAA+B,CAAA;AAE7C,wBAAwB;AACxB,cAAc,wCAAwC,CAAA;AACtD,cAAc,kCAAkC,CAAA;AAChD,cAAc,6CAA6C,CAAA;AAC3D,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iDAAiD,CAAA;AAC/D,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0CAA0C,CAAA;AACxD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,0CAA0C,CAAA;AAExD,yBAAyB;AACzB,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,0CAA0C,CAAA;AACxD,cAAc,sCAAsC,CAAA;AACpD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,0CAA0C,CAAA;AACxD,cAAc,kCAAkC,CAAA;AAChD,cAAc,oCAAoC,CAAA;AAClD,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AAEpC,oBAAoB;AACpB,cAAc,uBAAuB,CAAA"}
|
|
@@ -2,8 +2,8 @@ import { type APIModalSubmitInteraction } from "discord-api-types/v10";
|
|
|
2
2
|
import { BaseInteraction } from "../abstracts/BaseInteraction.js";
|
|
3
3
|
import type { InteractionReplyOptions } from "../abstracts/BaseInteraction.js";
|
|
4
4
|
import type { Client, InteractionDefaults } from "../index.js";
|
|
5
|
-
import { FieldsHandler } from "./FieldsHandler.js";
|
|
6
5
|
import type { MessagePayload } from "../types.js";
|
|
6
|
+
import { FieldsHandler } from "./FieldsHandler.js";
|
|
7
7
|
export declare class ModalInteraction extends BaseInteraction<APIModalSubmitInteraction> {
|
|
8
8
|
customId: string;
|
|
9
9
|
fields: FieldsHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalInteraction.d.ts","sourceRoot":"","sources":["../../../src/internals/ModalInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,yBAAyB,EAI9B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ModalInteraction.d.ts","sourceRoot":"","sources":["../../../src/internals/ModalInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,yBAAyB,EAI9B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,qBAAa,gBAAiB,SAAQ,eAAe,CAAC,yBAAyB,CAAC;IAC/E,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,aAAa,CAAA;gBAGpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,yBAAyB,EAC/B,QAAQ,EAAE,mBAAmB;IAQ9B;;;OAGG;IACG,WAAW;IAYjB;;;OAGG;IACG,MAAM,CACX,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAM;CAgBrD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InteractionResponseType, Routes } from "discord-api-types/v10";
|
|
2
2
|
import { BaseInteraction } from "../abstracts/BaseInteraction.js";
|
|
3
|
-
import { FieldsHandler } from "./FieldsHandler.js";
|
|
4
3
|
import { serializePayload } from "../utils.js";
|
|
4
|
+
import { FieldsHandler } from "./FieldsHandler.js";
|
|
5
5
|
export class ModalInteraction extends BaseInteraction {
|
|
6
6
|
customId;
|
|
7
7
|
fields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalInteraction.js","sourceRoot":"","sources":["../../../src/internals/ModalInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,uBAAuB,EAEvB,MAAM,EACN,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"ModalInteraction.js","sourceRoot":"","sources":["../../../src/internals/ModalInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,uBAAuB,EAEvB,MAAM,EACN,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAIjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,OAAO,gBAAiB,SAAQ,eAA0C;IAC/E,QAAQ,CAAQ;IAChB,MAAM,CAAe;IAErB,YACC,MAAc,EACd,IAA+B,EAC/B,QAA6B;QAE7B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QAE7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW;QAChB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAC1B,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAC/D;YACC,IAAI,EAAE;gBACL,IAAI,EAAE,uBAAuB,CAAC,qBAAqB;aACT;SAC3C,CACD,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACX,IAAoB,EACpB,UAAkD,EAAE;QAEpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAC1B,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAC/D;YACC,IAAI,EAAE;gBACL,IAAI,EAAE,uBAAuB,CAAC,aAAa;gBAC3C,IAAI,EAAE;oBACL,GAAG,UAAU;iBACb;aACyC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;SACpB,CACD,CAAA;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Plugin } from "../../abstracts/Plugin.js";
|
|
2
|
+
import type { Client } from "../../classes/Client.js";
|
|
3
|
+
import { type LinkedRolesOptions } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* This class is the main class that is used for the linked roles feature of Carbon.
|
|
6
|
+
* It handles all the additional routes and oauth.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { createHandle, Client, ApplicationRoleConnectionMetadataType } from "@buape/carbon"
|
|
11
|
+
* import { LinkedRoles } from "@buape/carbon/linked-roles"
|
|
12
|
+
*
|
|
13
|
+
* const handle = createHandle((env) => {
|
|
14
|
+
* const client = new Client({ ... }, [ ... ])
|
|
15
|
+
* const linkedRoles = new LinkedRoles(client, {
|
|
16
|
+
* metadata: [
|
|
17
|
+
* {
|
|
18
|
+
* key: 'is_staff',
|
|
19
|
+
* name: 'Verified Staff',
|
|
20
|
+
* description: 'Whether the user is a verified staff member',
|
|
21
|
+
* type: ApplicationRoleConnectionMetadataType.BooleanEqual
|
|
22
|
+
* }
|
|
23
|
+
* ],
|
|
24
|
+
* metadataCheckers: {
|
|
25
|
+
* is_staff: async (userId) => {
|
|
26
|
+
* const allStaff = ["439223656200273932"]
|
|
27
|
+
* return allStaff.includes(userId)
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* })
|
|
31
|
+
* return [client, linkedRoles]
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class LinkedRoles extends Plugin {
|
|
36
|
+
client: Client;
|
|
37
|
+
options: LinkedRolesOptions;
|
|
38
|
+
constructor(client: Client, options: LinkedRolesOptions);
|
|
39
|
+
private appendRoutes;
|
|
40
|
+
/**
|
|
41
|
+
* Handle a request to deploy the linked roles to Discord
|
|
42
|
+
* @returns A response
|
|
43
|
+
*/
|
|
44
|
+
handleDeployRequest(): Promise<Response>;
|
|
45
|
+
/**
|
|
46
|
+
* Handle the verify user request
|
|
47
|
+
* @returns A response
|
|
48
|
+
*/
|
|
49
|
+
handleUserVerificationRequest(): Promise<Response>;
|
|
50
|
+
/**
|
|
51
|
+
* Handle the verify user callback request
|
|
52
|
+
* @param req The request
|
|
53
|
+
* @returns A response
|
|
54
|
+
*/
|
|
55
|
+
handleUserVerificationCallbackRequest(req: Request): Promise<Response>;
|
|
56
|
+
private getMetadataFromCheckers;
|
|
57
|
+
private getOAuthTokens;
|
|
58
|
+
private updateMetadata;
|
|
59
|
+
private setMetadata;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=LinkedRoles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkedRoles.d.ts","sourceRoot":"","sources":["../../../../src/plugins/linked-roles/LinkedRoles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAEN,KAAK,kBAAkB,EACvB,MAAM,YAAY,CAAA;AAenB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAY,SAAQ,MAAM;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,kBAAkB,CAAA;gBAEf,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;IAQvD,OAAO,CAAC,YAAY;IAsBpB;;;OAGG;IACU,mBAAmB;IAKhC;;;OAGG;IACU,6BAA6B;IAS1C;;;;OAIG;IACU,qCAAqC,CAAC,GAAG,EAAE,OAAO;YA4BjD,uBAAuB;YAiCvB,cAAc;YA4Bd,cAAc;YAuBd,WAAW;CAoBzB"}
|