@kavtuai/guildgate 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/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +399 -0
- package/README.tr.md +397 -0
- package/SECURITY.md +36 -0
- package/TEST_REPORT.md +50 -0
- package/bin/guildgate-doctor.mjs +91 -0
- package/bin/guildgate-writing-check.mjs +73 -0
- package/dist/action.d.ts +65 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +4 -0
- package/dist/action.js.map +1 -0
- package/dist/cache.d.ts +23 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +53 -0
- package/dist/cache.js.map +1 -0
- package/dist/crypto.d.ts +15 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +87 -0
- package/dist/crypto.js.map +1 -0
- package/dist/discord/authorizer.d.ts +41 -0
- package/dist/discord/authorizer.d.ts.map +1 -0
- package/dist/discord/authorizer.js +101 -0
- package/dist/discord/authorizer.js.map +1 -0
- package/dist/discord/oauth.d.ts +64 -0
- package/dist/discord/oauth.d.ts.map +1 -0
- package/dist/discord/oauth.js +226 -0
- package/dist/discord/oauth.js.map +1 -0
- package/dist/discord/permissions.d.ts +85 -0
- package/dist/discord/permissions.d.ts.map +1 -0
- package/dist/discord/permissions.js +99 -0
- package/dist/discord/permissions.js.map +1 -0
- package/dist/discord.d.ts +4 -0
- package/dist/discord.d.ts.map +1 -0
- package/dist/discord.js +4 -0
- package/dist/discord.js.map +1 -0
- package/dist/errors.d.ts +43 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +57 -0
- package/dist/errors.js.map +1 -0
- package/dist/express.d.ts +3 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +3 -0
- package/dist/express.js.map +1 -0
- package/dist/fastify.d.ts +3 -0
- package/dist/fastify.d.ts.map +1 -0
- package/dist/fastify.js +3 -0
- package/dist/fastify.js.map +1 -0
- package/dist/http/express.d.ts +24 -0
- package/dist/http/express.d.ts.map +1 -0
- package/dist/http/express.js +60 -0
- package/dist/http/express.js.map +1 -0
- package/dist/http/fastify.d.ts +25 -0
- package/dist/http/fastify.d.ts.map +1 -0
- package/dist/http/fastify.js +57 -0
- package/dist/http/fastify.js.map +1 -0
- package/dist/i18n.d.ts +5 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +66 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.d.ts +83 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +395 -0
- package/dist/kernel.js.map +1 -0
- package/dist/memory-store.d.ts +13 -0
- package/dist/memory-store.d.ts.map +1 -0
- package/dist/memory-store.js +261 -0
- package/dist/memory-store.js.map +1 -0
- package/dist/realtime/hub.d.ts +42 -0
- package/dist/realtime/hub.d.ts.map +1 -0
- package/dist/realtime/hub.js +152 -0
- package/dist/realtime/hub.js.map +1 -0
- package/dist/realtime/outbox.d.ts +12 -0
- package/dist/realtime/outbox.d.ts.map +1 -0
- package/dist/realtime/outbox.js +18 -0
- package/dist/realtime/outbox.js.map +1 -0
- package/dist/realtime.d.ts +3 -0
- package/dist/realtime.d.ts.map +1 -0
- package/dist/realtime.js +3 -0
- package/dist/realtime.js.map +1 -0
- package/dist/redis.d.ts +49 -0
- package/dist/redis.d.ts.map +1 -0
- package/dist/redis.js +233 -0
- package/dist/redis.js.map +1 -0
- package/dist/resilience.d.ts +23 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +85 -0
- package/dist/resilience.js.map +1 -0
- package/dist/security.d.ts +21 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +94 -0
- package/dist/security.js.map +1 -0
- package/dist/session.d.ts +32 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +97 -0
- package/dist/session.js.map +1 -0
- package/dist/stores.d.ts +73 -0
- package/dist/stores.d.ts.map +1 -0
- package/dist/stores.js +4 -0
- package/dist/stores.js.map +1 -0
- package/dist/testing.d.ts +32 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +60 -0
- package/dist/testing.js.map +1 -0
- package/dist/types.d.ts +183 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/docs/WRITING_STYLE.md +118 -0
- package/docs/architecture.md +83 -0
- package/docs/custom-stores.md +111 -0
- package/docs/owner-management.md +44 -0
- package/docs/research-notes.md +61 -0
- package/docs/setup.md +104 -0
- package/docs/threat-model.md +79 -0
- package/docs/tr/arastirma-notlari.md +41 -0
- package/docs/tr/guvenlik-bildirimi.md +7 -0
- package/docs/tr/kurulum.md +63 -0
- package/docs/tr/mimari.md +59 -0
- package/docs/tr/sahip-yonetimi.md +7 -0
- package/docs/tr/tehdit-modeli.md +39 -0
- package/docs/tr/veritabani-suruculeri.md +23 -0
- package/docs/tr/yazim-kilavuzu.md +116 -0
- package/docs/uml/action-sequence.mmd +39 -0
- package/docs/uml/components.mmd +84 -0
- package/docs/uml/deployment.mmd +19 -0
- package/docs/uml/oauth-sequence.mmd +30 -0
- package/docs/uml/realtime-sequence.mmd +28 -0
- package/package.json +90 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { sha256, randomToken } from "../crypto.js";
|
|
2
|
+
import { errors, GuildGateError } from "../errors.js";
|
|
3
|
+
import { runWithDeadline } from "../resilience.js";
|
|
4
|
+
export function createDiscordOAuth(input) {
|
|
5
|
+
const config = input.config;
|
|
6
|
+
const fetcher = config.fetch ?? globalThis.fetch;
|
|
7
|
+
const apiBase = config.apiBaseUrl ?? "https://discord.com/api/v10";
|
|
8
|
+
const authBase = config.authorizationBaseUrl ?? "https://discord.com/oauth2/authorize";
|
|
9
|
+
const stateStore = input.stateStore ?? input.kernel.config.stores.oauthStates;
|
|
10
|
+
const credentialStore = input.credentialStore ?? input.kernel.config.stores.credentials;
|
|
11
|
+
const stateCookieName = config.stateCookieName ?? (input.kernel.config.app.environment === "production" ? "__Host-guildgate.oauth" : "guildgate.oauth");
|
|
12
|
+
const scopes = config.scopes ?? ["identify", "guilds"];
|
|
13
|
+
validateStateCookieName(stateCookieName, input.kernel.config.app.environment === "production");
|
|
14
|
+
validateRedirectUri(config.redirectUri, input.kernel.config.app.environment);
|
|
15
|
+
return {
|
|
16
|
+
async beginLogin(begin = {}) {
|
|
17
|
+
const state = randomToken();
|
|
18
|
+
const browserNonce = randomToken();
|
|
19
|
+
const now = new Date();
|
|
20
|
+
const returnTo = safeReturnTo(begin.returnTo ?? "/dashboard");
|
|
21
|
+
await stateStore.put({
|
|
22
|
+
stateHash: sha256(state),
|
|
23
|
+
returnTo,
|
|
24
|
+
locale: begin.locale ?? input.kernel.config.locale?.default ?? "en",
|
|
25
|
+
createdAt: now.toISOString(),
|
|
26
|
+
expiresAt: new Date(now.getTime() + (config.stateTtlMs ?? 10 * 60_000)).toISOString(),
|
|
27
|
+
metadata: { browserNonceHash: sha256(browserNonce) },
|
|
28
|
+
});
|
|
29
|
+
const url = new URL(authBase);
|
|
30
|
+
url.searchParams.set("response_type", "code");
|
|
31
|
+
url.searchParams.set("client_id", config.clientId);
|
|
32
|
+
url.searchParams.set("redirect_uri", config.redirectUri);
|
|
33
|
+
url.searchParams.set("scope", scopes.join(" "));
|
|
34
|
+
url.searchParams.set("state", state);
|
|
35
|
+
if (begin.prompt)
|
|
36
|
+
url.searchParams.set("prompt", begin.prompt);
|
|
37
|
+
return {
|
|
38
|
+
authorizationUrl: url.toString(),
|
|
39
|
+
stateCookie: serializeStateCookie(stateCookieName, browserNonce, input.kernel.config.app.environment === "production", Math.floor((config.stateTtlMs ?? 10 * 60_000) / 1000)),
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
async completeLogin(complete) {
|
|
43
|
+
const record = await stateStore.consume(sha256(complete.state), new Date().toISOString());
|
|
44
|
+
const expectedNonceHash = record?.metadata?.browserNonceHash;
|
|
45
|
+
if (!record || typeof expectedNonceHash !== "string" || !complete.stateCookie || sha256(complete.stateCookie) !== expectedNonceHash) {
|
|
46
|
+
throw errors.oauthStateInvalid();
|
|
47
|
+
}
|
|
48
|
+
const token = await exchangeCode(complete.code);
|
|
49
|
+
const [user, guilds] = await Promise.all([
|
|
50
|
+
discordGet("/users/@me", token.access_token),
|
|
51
|
+
discordGet("/users/@me/guilds", token.access_token),
|
|
52
|
+
]);
|
|
53
|
+
const now = new Date();
|
|
54
|
+
await credentialStore.set({
|
|
55
|
+
provider: "discord",
|
|
56
|
+
userId: user.id,
|
|
57
|
+
accessTokenCiphertext: input.cipher.encrypt(token.access_token),
|
|
58
|
+
refreshTokenCiphertext: input.cipher.encrypt(token.refresh_token),
|
|
59
|
+
scope: token.scope,
|
|
60
|
+
tokenType: token.token_type,
|
|
61
|
+
expiresAt: new Date(now.getTime() + token.expires_in * 1000).toISOString(),
|
|
62
|
+
updatedAt: now.toISOString(),
|
|
63
|
+
});
|
|
64
|
+
const session = await input.kernel.createSession({
|
|
65
|
+
userId: user.id,
|
|
66
|
+
locale: user.locale ?? record.locale,
|
|
67
|
+
metadata: {
|
|
68
|
+
provider: "discord",
|
|
69
|
+
username: user.username,
|
|
70
|
+
globalName: user.global_name,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
user,
|
|
75
|
+
guilds,
|
|
76
|
+
returnTo: record.returnTo,
|
|
77
|
+
sessionToken: session.sessionToken,
|
|
78
|
+
csrfToken: session.csrfToken,
|
|
79
|
+
setCookie: session.setCookie,
|
|
80
|
+
clearStateCookie: clearStateCookie(stateCookieName, input.kernel.config.app.environment === "production"),
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
async getAccessToken(userId) {
|
|
84
|
+
const record = await credentialStore.get("discord", userId);
|
|
85
|
+
if (!record)
|
|
86
|
+
throw errors.authenticationRequired();
|
|
87
|
+
if (new Date(record.expiresAt).getTime() - Date.now() > 60_000) {
|
|
88
|
+
return input.cipher.decrypt(record.accessTokenCiphertext);
|
|
89
|
+
}
|
|
90
|
+
const refreshed = await refreshToken(input.cipher.decrypt(record.refreshTokenCiphertext));
|
|
91
|
+
const now = new Date();
|
|
92
|
+
await credentialStore.set({
|
|
93
|
+
...record,
|
|
94
|
+
accessTokenCiphertext: input.cipher.encrypt(refreshed.access_token),
|
|
95
|
+
refreshTokenCiphertext: input.cipher.encrypt(refreshed.refresh_token),
|
|
96
|
+
scope: refreshed.scope,
|
|
97
|
+
tokenType: refreshed.token_type,
|
|
98
|
+
expiresAt: new Date(now.getTime() + refreshed.expires_in * 1000).toISOString(),
|
|
99
|
+
updatedAt: now.toISOString(),
|
|
100
|
+
});
|
|
101
|
+
return refreshed.access_token;
|
|
102
|
+
},
|
|
103
|
+
async revoke(userId) {
|
|
104
|
+
const record = await credentialStore.get("discord", userId);
|
|
105
|
+
if (!record)
|
|
106
|
+
return;
|
|
107
|
+
const token = input.cipher.decrypt(record.refreshTokenCiphertext);
|
|
108
|
+
const body = new URLSearchParams({ token, token_type_hint: "refresh_token" });
|
|
109
|
+
await request("/oauth2/token/revoke", {
|
|
110
|
+
method: "POST",
|
|
111
|
+
headers: {
|
|
112
|
+
"content-type": "application/x-www-form-urlencoded",
|
|
113
|
+
authorization: basicAuth(config.clientId, config.clientSecret),
|
|
114
|
+
},
|
|
115
|
+
body,
|
|
116
|
+
}).catch(() => undefined);
|
|
117
|
+
await credentialStore.delete("discord", userId);
|
|
118
|
+
await input.kernel.revokeUserSessions(userId);
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
async function exchangeCode(code) {
|
|
122
|
+
return tokenRequest(new URLSearchParams({
|
|
123
|
+
grant_type: "authorization_code",
|
|
124
|
+
code,
|
|
125
|
+
redirect_uri: config.redirectUri,
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
async function refreshToken(token) {
|
|
129
|
+
return tokenRequest(new URLSearchParams({ grant_type: "refresh_token", refresh_token: token }));
|
|
130
|
+
}
|
|
131
|
+
async function tokenRequest(body) {
|
|
132
|
+
const response = await request("/oauth2/token", {
|
|
133
|
+
method: "POST",
|
|
134
|
+
headers: {
|
|
135
|
+
"content-type": "application/x-www-form-urlencoded",
|
|
136
|
+
authorization: basicAuth(config.clientId, config.clientSecret),
|
|
137
|
+
},
|
|
138
|
+
body,
|
|
139
|
+
});
|
|
140
|
+
return parseJson(response);
|
|
141
|
+
}
|
|
142
|
+
async function discordGet(path, token) {
|
|
143
|
+
const response = await request(path, { headers: { authorization: `Bearer ${token}` } });
|
|
144
|
+
return parseJson(response);
|
|
145
|
+
}
|
|
146
|
+
async function request(path, init) {
|
|
147
|
+
const target = path.startsWith("/oauth2") ? `${apiBase}${path}` : `${apiBase}${path}`;
|
|
148
|
+
return runWithDeadline({
|
|
149
|
+
timeoutMs: config.requestTimeoutMs ?? 5_000,
|
|
150
|
+
retry: {
|
|
151
|
+
attempts: 2,
|
|
152
|
+
baseDelayMs: 150,
|
|
153
|
+
maximumDelayMs: 1_000,
|
|
154
|
+
shouldRetry: (error) => error instanceof TypeError || (error instanceof GuildGateError && error.retryable),
|
|
155
|
+
delayMs: (error) => {
|
|
156
|
+
const retryAfterMs = error instanceof GuildGateError ? error.details?.retryAfterMs : undefined;
|
|
157
|
+
return typeof retryAfterMs === "number" ? retryAfterMs : undefined;
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
execute: async (signal) => {
|
|
161
|
+
const response = await fetcher(target, { ...init, signal });
|
|
162
|
+
if (response.status === 429) {
|
|
163
|
+
const body = await response.clone().json().catch(() => ({}));
|
|
164
|
+
throw new GuildGateError({
|
|
165
|
+
code: "RATE_LIMITED",
|
|
166
|
+
status: 429,
|
|
167
|
+
retryable: true,
|
|
168
|
+
details: { retryAfterMs: Math.ceil((body.retry_after ?? 1) * 1000) },
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
if (!response.ok) {
|
|
172
|
+
throw errors.oauthFailed({ status: response.status, body: await response.text().catch(() => "") });
|
|
173
|
+
}
|
|
174
|
+
return response;
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function basicAuth(clientId, clientSecret) {
|
|
180
|
+
return `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString("base64")}`;
|
|
181
|
+
}
|
|
182
|
+
async function parseJson(response) {
|
|
183
|
+
return response.json();
|
|
184
|
+
}
|
|
185
|
+
function safeReturnTo(value) {
|
|
186
|
+
if (!value.startsWith("/") || value.startsWith("//") || value.includes("\\"))
|
|
187
|
+
return "/dashboard";
|
|
188
|
+
return value;
|
|
189
|
+
}
|
|
190
|
+
function validateRedirectUri(value, environment) {
|
|
191
|
+
const url = new URL(value);
|
|
192
|
+
if (environment === "production" && url.protocol !== "https:") {
|
|
193
|
+
throw errors.configuration("Discord redirect URI must use HTTPS in production");
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function serializeStateCookie(name, value, secure, maxAge) {
|
|
197
|
+
return [
|
|
198
|
+
`${name}=${encodeURIComponent(value)}`,
|
|
199
|
+
"Path=/",
|
|
200
|
+
`Max-Age=${maxAge}`,
|
|
201
|
+
"HttpOnly",
|
|
202
|
+
secure ? "Secure" : "",
|
|
203
|
+
"SameSite=Lax",
|
|
204
|
+
].filter(Boolean).join("; ");
|
|
205
|
+
}
|
|
206
|
+
function clearStateCookie(name, secure) {
|
|
207
|
+
return [
|
|
208
|
+
`${name}=`,
|
|
209
|
+
"Path=/",
|
|
210
|
+
"Max-Age=0",
|
|
211
|
+
"HttpOnly",
|
|
212
|
+
secure ? "Secure" : "",
|
|
213
|
+
"SameSite=Lax",
|
|
214
|
+
].filter(Boolean).join("; ");
|
|
215
|
+
}
|
|
216
|
+
function validateStateCookieName(name, secure) {
|
|
217
|
+
if (!name || /[\s;,=]/.test(name))
|
|
218
|
+
throw errors.configuration("OAuth state cookie name is invalid");
|
|
219
|
+
if (name.startsWith("__Host-") && !secure) {
|
|
220
|
+
throw errors.configuration("__Host- OAuth state cookies require HTTPS");
|
|
221
|
+
}
|
|
222
|
+
if (name.startsWith("__Secure-") && !secure) {
|
|
223
|
+
throw errors.configuration("__Secure- OAuth state cookies require HTTPS");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/discord/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export declare const DiscordPermissions: {
|
|
2
|
+
readonly CREATE_INSTANT_INVITE: bigint;
|
|
3
|
+
readonly KICK_MEMBERS: bigint;
|
|
4
|
+
readonly BAN_MEMBERS: bigint;
|
|
5
|
+
readonly ADMINISTRATOR: bigint;
|
|
6
|
+
readonly MANAGE_CHANNELS: bigint;
|
|
7
|
+
readonly MANAGE_GUILD: bigint;
|
|
8
|
+
readonly ADD_REACTIONS: bigint;
|
|
9
|
+
readonly VIEW_AUDIT_LOG: bigint;
|
|
10
|
+
readonly PRIORITY_SPEAKER: bigint;
|
|
11
|
+
readonly STREAM: bigint;
|
|
12
|
+
readonly VIEW_CHANNEL: bigint;
|
|
13
|
+
readonly SEND_MESSAGES: bigint;
|
|
14
|
+
readonly SEND_TTS_MESSAGES: bigint;
|
|
15
|
+
readonly MANAGE_MESSAGES: bigint;
|
|
16
|
+
readonly EMBED_LINKS: bigint;
|
|
17
|
+
readonly ATTACH_FILES: bigint;
|
|
18
|
+
readonly READ_MESSAGE_HISTORY: bigint;
|
|
19
|
+
readonly MENTION_EVERYONE: bigint;
|
|
20
|
+
readonly USE_EXTERNAL_EMOJIS: bigint;
|
|
21
|
+
readonly VIEW_GUILD_INSIGHTS: bigint;
|
|
22
|
+
readonly CONNECT: bigint;
|
|
23
|
+
readonly SPEAK: bigint;
|
|
24
|
+
readonly MUTE_MEMBERS: bigint;
|
|
25
|
+
readonly DEAFEN_MEMBERS: bigint;
|
|
26
|
+
readonly MOVE_MEMBERS: bigint;
|
|
27
|
+
readonly USE_VAD: bigint;
|
|
28
|
+
readonly CHANGE_NICKNAME: bigint;
|
|
29
|
+
readonly MANAGE_NICKNAMES: bigint;
|
|
30
|
+
readonly MANAGE_ROLES: bigint;
|
|
31
|
+
readonly MANAGE_WEBHOOKS: bigint;
|
|
32
|
+
readonly MANAGE_GUILD_EXPRESSIONS: bigint;
|
|
33
|
+
readonly USE_APPLICATION_COMMANDS: bigint;
|
|
34
|
+
readonly REQUEST_TO_SPEAK: bigint;
|
|
35
|
+
readonly MANAGE_EVENTS: bigint;
|
|
36
|
+
readonly MANAGE_THREADS: bigint;
|
|
37
|
+
readonly CREATE_PUBLIC_THREADS: bigint;
|
|
38
|
+
readonly CREATE_PRIVATE_THREADS: bigint;
|
|
39
|
+
readonly USE_EXTERNAL_STICKERS: bigint;
|
|
40
|
+
readonly SEND_MESSAGES_IN_THREADS: bigint;
|
|
41
|
+
readonly USE_EMBEDDED_ACTIVITIES: bigint;
|
|
42
|
+
readonly MODERATE_MEMBERS: bigint;
|
|
43
|
+
readonly VIEW_CREATOR_MONETIZATION_ANALYTICS: bigint;
|
|
44
|
+
readonly USE_SOUNDBOARD: bigint;
|
|
45
|
+
readonly CREATE_GUILD_EXPRESSIONS: bigint;
|
|
46
|
+
readonly CREATE_EVENTS: bigint;
|
|
47
|
+
readonly USE_EXTERNAL_SOUNDS: bigint;
|
|
48
|
+
readonly SEND_VOICE_MESSAGES: bigint;
|
|
49
|
+
readonly SET_VOICE_CHANNEL_STATUS: bigint;
|
|
50
|
+
readonly SEND_POLLS: bigint;
|
|
51
|
+
readonly USE_EXTERNAL_APPS: bigint;
|
|
52
|
+
readonly PIN_MESSAGES: bigint;
|
|
53
|
+
readonly BYPASS_SLOWMODE: bigint;
|
|
54
|
+
};
|
|
55
|
+
export type DiscordPermissionName = keyof typeof DiscordPermissions;
|
|
56
|
+
export declare function permissionBits(value: string | number | bigint): bigint;
|
|
57
|
+
export declare function combinePermissions(names: DiscordPermissionName[]): bigint;
|
|
58
|
+
export declare function hasPermissions(value: string | number | bigint, required: DiscordPermissionName[], input?: {
|
|
59
|
+
owner?: boolean;
|
|
60
|
+
administratorOverrides?: boolean;
|
|
61
|
+
}): boolean;
|
|
62
|
+
export declare function missingPermissions(value: string | number | bigint, required: DiscordPermissionName[], input?: {
|
|
63
|
+
owner?: boolean;
|
|
64
|
+
administratorOverrides?: boolean;
|
|
65
|
+
}): DiscordPermissionName[];
|
|
66
|
+
export interface DiscordRoleLike {
|
|
67
|
+
id: string;
|
|
68
|
+
position: number;
|
|
69
|
+
permissions: string;
|
|
70
|
+
}
|
|
71
|
+
export declare function computeBaseGuildPermissions(input: {
|
|
72
|
+
guildId: string;
|
|
73
|
+
ownerId?: string;
|
|
74
|
+
memberId: string;
|
|
75
|
+
roleIds: string[];
|
|
76
|
+
roles: DiscordRoleLike[];
|
|
77
|
+
}): bigint;
|
|
78
|
+
export declare function highestRolePosition(roleIds: string[], roles: DiscordRoleLike[]): number;
|
|
79
|
+
export declare function canManageTargetRole(input: {
|
|
80
|
+
actorRoleIds: string[];
|
|
81
|
+
targetRolePosition: number;
|
|
82
|
+
roles: DiscordRoleLike[];
|
|
83
|
+
actorIsGuildOwner?: boolean;
|
|
84
|
+
}): boolean;
|
|
85
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/discord/permissions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDrB,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAEpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAEzE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAC/B,QAAQ,EAAE,qBAAqB,EAAE,EACjC,KAAK,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D,OAAO,CAMT;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAC/B,QAAQ,EAAE,qBAAqB,EAAE,EACjC,KAAK,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D,qBAAqB,EAAE,CAKzB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B,GAAG,MAAM,CAUT;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAGvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAEV"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export const DiscordPermissions = {
|
|
2
|
+
CREATE_INSTANT_INVITE: 1n << 0n,
|
|
3
|
+
KICK_MEMBERS: 1n << 1n,
|
|
4
|
+
BAN_MEMBERS: 1n << 2n,
|
|
5
|
+
ADMINISTRATOR: 1n << 3n,
|
|
6
|
+
MANAGE_CHANNELS: 1n << 4n,
|
|
7
|
+
MANAGE_GUILD: 1n << 5n,
|
|
8
|
+
ADD_REACTIONS: 1n << 6n,
|
|
9
|
+
VIEW_AUDIT_LOG: 1n << 7n,
|
|
10
|
+
PRIORITY_SPEAKER: 1n << 8n,
|
|
11
|
+
STREAM: 1n << 9n,
|
|
12
|
+
VIEW_CHANNEL: 1n << 10n,
|
|
13
|
+
SEND_MESSAGES: 1n << 11n,
|
|
14
|
+
SEND_TTS_MESSAGES: 1n << 12n,
|
|
15
|
+
MANAGE_MESSAGES: 1n << 13n,
|
|
16
|
+
EMBED_LINKS: 1n << 14n,
|
|
17
|
+
ATTACH_FILES: 1n << 15n,
|
|
18
|
+
READ_MESSAGE_HISTORY: 1n << 16n,
|
|
19
|
+
MENTION_EVERYONE: 1n << 17n,
|
|
20
|
+
USE_EXTERNAL_EMOJIS: 1n << 18n,
|
|
21
|
+
VIEW_GUILD_INSIGHTS: 1n << 19n,
|
|
22
|
+
CONNECT: 1n << 20n,
|
|
23
|
+
SPEAK: 1n << 21n,
|
|
24
|
+
MUTE_MEMBERS: 1n << 22n,
|
|
25
|
+
DEAFEN_MEMBERS: 1n << 23n,
|
|
26
|
+
MOVE_MEMBERS: 1n << 24n,
|
|
27
|
+
USE_VAD: 1n << 25n,
|
|
28
|
+
CHANGE_NICKNAME: 1n << 26n,
|
|
29
|
+
MANAGE_NICKNAMES: 1n << 27n,
|
|
30
|
+
MANAGE_ROLES: 1n << 28n,
|
|
31
|
+
MANAGE_WEBHOOKS: 1n << 29n,
|
|
32
|
+
MANAGE_GUILD_EXPRESSIONS: 1n << 30n,
|
|
33
|
+
USE_APPLICATION_COMMANDS: 1n << 31n,
|
|
34
|
+
REQUEST_TO_SPEAK: 1n << 32n,
|
|
35
|
+
MANAGE_EVENTS: 1n << 33n,
|
|
36
|
+
MANAGE_THREADS: 1n << 34n,
|
|
37
|
+
CREATE_PUBLIC_THREADS: 1n << 35n,
|
|
38
|
+
CREATE_PRIVATE_THREADS: 1n << 36n,
|
|
39
|
+
USE_EXTERNAL_STICKERS: 1n << 37n,
|
|
40
|
+
SEND_MESSAGES_IN_THREADS: 1n << 38n,
|
|
41
|
+
USE_EMBEDDED_ACTIVITIES: 1n << 39n,
|
|
42
|
+
MODERATE_MEMBERS: 1n << 40n,
|
|
43
|
+
VIEW_CREATOR_MONETIZATION_ANALYTICS: 1n << 41n,
|
|
44
|
+
USE_SOUNDBOARD: 1n << 42n,
|
|
45
|
+
CREATE_GUILD_EXPRESSIONS: 1n << 43n,
|
|
46
|
+
CREATE_EVENTS: 1n << 44n,
|
|
47
|
+
USE_EXTERNAL_SOUNDS: 1n << 45n,
|
|
48
|
+
SEND_VOICE_MESSAGES: 1n << 46n,
|
|
49
|
+
SET_VOICE_CHANNEL_STATUS: 1n << 48n,
|
|
50
|
+
SEND_POLLS: 1n << 49n,
|
|
51
|
+
USE_EXTERNAL_APPS: 1n << 50n,
|
|
52
|
+
PIN_MESSAGES: 1n << 51n,
|
|
53
|
+
BYPASS_SLOWMODE: 1n << 52n,
|
|
54
|
+
};
|
|
55
|
+
export function permissionBits(value) {
|
|
56
|
+
return BigInt(value);
|
|
57
|
+
}
|
|
58
|
+
export function combinePermissions(names) {
|
|
59
|
+
return names.reduce((bits, name) => bits | DiscordPermissions[name], 0n);
|
|
60
|
+
}
|
|
61
|
+
export function hasPermissions(value, required, input) {
|
|
62
|
+
if (input?.owner)
|
|
63
|
+
return true;
|
|
64
|
+
const bits = permissionBits(value);
|
|
65
|
+
if (input?.administratorOverrides !== false && (bits & DiscordPermissions.ADMINISTRATOR) !== 0n)
|
|
66
|
+
return true;
|
|
67
|
+
const expected = combinePermissions(required);
|
|
68
|
+
return (bits & expected) === expected;
|
|
69
|
+
}
|
|
70
|
+
export function missingPermissions(value, required, input) {
|
|
71
|
+
if (input?.owner)
|
|
72
|
+
return [];
|
|
73
|
+
const bits = permissionBits(value);
|
|
74
|
+
if (input?.administratorOverrides !== false && (bits & DiscordPermissions.ADMINISTRATOR) !== 0n)
|
|
75
|
+
return [];
|
|
76
|
+
return required.filter((name) => (bits & DiscordPermissions[name]) !== DiscordPermissions[name]);
|
|
77
|
+
}
|
|
78
|
+
export function computeBaseGuildPermissions(input) {
|
|
79
|
+
if (input.ownerId && input.ownerId === input.memberId)
|
|
80
|
+
return (1n << 63n) - 1n;
|
|
81
|
+
const roleSet = new Set(input.roleIds);
|
|
82
|
+
roleSet.add(input.guildId);
|
|
83
|
+
let bits = 0n;
|
|
84
|
+
for (const role of input.roles) {
|
|
85
|
+
if (roleSet.has(role.id))
|
|
86
|
+
bits |= BigInt(role.permissions);
|
|
87
|
+
}
|
|
88
|
+
if ((bits & DiscordPermissions.ADMINISTRATOR) !== 0n)
|
|
89
|
+
return (1n << 63n) - 1n;
|
|
90
|
+
return bits;
|
|
91
|
+
}
|
|
92
|
+
export function highestRolePosition(roleIds, roles) {
|
|
93
|
+
const set = new Set(roleIds);
|
|
94
|
+
return roles.reduce((position, role) => set.has(role.id) ? Math.max(position, role.position) : position, 0);
|
|
95
|
+
}
|
|
96
|
+
export function canManageTargetRole(input) {
|
|
97
|
+
return input.actorIsGuildOwner === true || highestRolePosition(input.actorRoleIds, input.roles) > input.targetRolePosition;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/discord/permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../src/discord.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
|
package/dist/discord.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord.js","sourceRoot":"","sources":["../src/discord.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare class GuildGateError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly status: number;
|
|
4
|
+
readonly retryable: boolean;
|
|
5
|
+
readonly expose: boolean;
|
|
6
|
+
readonly details?: Record<string, unknown>;
|
|
7
|
+
constructor(input: {
|
|
8
|
+
code: string;
|
|
9
|
+
message?: string;
|
|
10
|
+
status?: number;
|
|
11
|
+
retryable?: boolean;
|
|
12
|
+
expose?: boolean;
|
|
13
|
+
details?: Record<string, unknown>;
|
|
14
|
+
cause?: unknown;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export declare function asGuildGateError(error: unknown): GuildGateError;
|
|
18
|
+
export declare const errors: {
|
|
19
|
+
configuration: (message: string) => GuildGateError;
|
|
20
|
+
authenticationRequired: () => GuildGateError;
|
|
21
|
+
sessionExpired: () => GuildGateError;
|
|
22
|
+
sessionRevoked: () => GuildGateError;
|
|
23
|
+
csrfInvalid: () => GuildGateError;
|
|
24
|
+
originNotAllowed: () => GuildGateError;
|
|
25
|
+
guildAccessDenied: () => GuildGateError;
|
|
26
|
+
userPermissionMissing: (permissions?: string[]) => GuildGateError;
|
|
27
|
+
botPermissionMissing: (permissions?: string[]) => GuildGateError;
|
|
28
|
+
botNotInGuild: () => GuildGateError;
|
|
29
|
+
rateLimited: (retryAfterMs: number) => GuildGateError;
|
|
30
|
+
inputInvalid: (details?: Record<string, unknown>) => GuildGateError;
|
|
31
|
+
idempotencyRequired: () => GuildGateError;
|
|
32
|
+
idempotencyConflict: () => GuildGateError;
|
|
33
|
+
idempotencyInflight: () => GuildGateError;
|
|
34
|
+
revisionConflict: (details?: Record<string, unknown>) => GuildGateError;
|
|
35
|
+
lockUnavailable: () => GuildGateError;
|
|
36
|
+
timeout: () => GuildGateError;
|
|
37
|
+
upstreamUnavailable: (details?: Record<string, unknown>) => GuildGateError;
|
|
38
|
+
maintenance: (reason?: string) => GuildGateError;
|
|
39
|
+
subjectBlocked: (reason?: string) => GuildGateError;
|
|
40
|
+
oauthStateInvalid: () => GuildGateError;
|
|
41
|
+
oauthFailed: (details?: Record<string, unknown>) => GuildGateError;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE/B,KAAK,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB;CASF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAQ/D;AAED,eAAO,MAAM,MAAM;6BACQ,MAAM;;;;;;;0CASO,MAAM,EAAE;yCAET,MAAM,EAAE;;gCAGjB,MAAM;6BAOT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;iCAMnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;oCAKpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;2BAEhC,MAAM;8BAEH,MAAM;;4BAGR,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAEhD,CAAC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export class GuildGateError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
status;
|
|
4
|
+
retryable;
|
|
5
|
+
expose;
|
|
6
|
+
details;
|
|
7
|
+
constructor(input) {
|
|
8
|
+
super(input.message ?? input.code, { cause: input.cause });
|
|
9
|
+
this.name = "GuildGateError";
|
|
10
|
+
this.code = input.code;
|
|
11
|
+
this.status = input.status ?? 500;
|
|
12
|
+
this.retryable = input.retryable ?? false;
|
|
13
|
+
this.expose = input.expose ?? this.status < 500;
|
|
14
|
+
this.details = input.details;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function asGuildGateError(error) {
|
|
18
|
+
if (error instanceof GuildGateError)
|
|
19
|
+
return error;
|
|
20
|
+
return new GuildGateError({
|
|
21
|
+
code: "INTERNAL_ERROR",
|
|
22
|
+
status: 500,
|
|
23
|
+
expose: false,
|
|
24
|
+
cause: error,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export const errors = {
|
|
28
|
+
configuration: (message) => new GuildGateError({ code: "CONFIGURATION_ERROR", message, status: 500, expose: true }),
|
|
29
|
+
authenticationRequired: () => new GuildGateError({ code: "AUTHENTICATION_REQUIRED", status: 401 }),
|
|
30
|
+
sessionExpired: () => new GuildGateError({ code: "SESSION_EXPIRED", status: 401 }),
|
|
31
|
+
sessionRevoked: () => new GuildGateError({ code: "SESSION_REVOKED", status: 401 }),
|
|
32
|
+
csrfInvalid: () => new GuildGateError({ code: "CSRF_INVALID", status: 403 }),
|
|
33
|
+
originNotAllowed: () => new GuildGateError({ code: "ORIGIN_NOT_ALLOWED", status: 403 }),
|
|
34
|
+
guildAccessDenied: () => new GuildGateError({ code: "GUILD_ACCESS_DENIED", status: 403 }),
|
|
35
|
+
userPermissionMissing: (permissions) => new GuildGateError({ code: "USER_PERMISSION_MISSING", status: 403, details: { permissions } }),
|
|
36
|
+
botPermissionMissing: (permissions) => new GuildGateError({ code: "BOT_PERMISSION_MISSING", status: 409, details: { permissions } }),
|
|
37
|
+
botNotInGuild: () => new GuildGateError({ code: "BOT_NOT_IN_GUILD", status: 409 }),
|
|
38
|
+
rateLimited: (retryAfterMs) => new GuildGateError({
|
|
39
|
+
code: "RATE_LIMITED",
|
|
40
|
+
status: 429,
|
|
41
|
+
retryable: true,
|
|
42
|
+
details: { retryAfterMs },
|
|
43
|
+
}),
|
|
44
|
+
inputInvalid: (details) => new GuildGateError({ code: "INPUT_INVALID", status: 400, details }),
|
|
45
|
+
idempotencyRequired: () => new GuildGateError({ code: "IDEMPOTENCY_KEY_REQUIRED", status: 400 }),
|
|
46
|
+
idempotencyConflict: () => new GuildGateError({ code: "IDEMPOTENCY_CONFLICT", status: 409 }),
|
|
47
|
+
idempotencyInflight: () => new GuildGateError({ code: "IDEMPOTENCY_INFLIGHT", status: 409, retryable: true }),
|
|
48
|
+
revisionConflict: (details) => new GuildGateError({ code: "REVISION_CONFLICT", status: 409, details }),
|
|
49
|
+
lockUnavailable: () => new GuildGateError({ code: "RESOURCE_BUSY", status: 409, retryable: true }),
|
|
50
|
+
timeout: () => new GuildGateError({ code: "UPSTREAM_TIMEOUT", status: 504, retryable: true }),
|
|
51
|
+
upstreamUnavailable: (details) => new GuildGateError({ code: "UPSTREAM_UNAVAILABLE", status: 503, retryable: true, details }),
|
|
52
|
+
maintenance: (reason) => new GuildGateError({ code: "MAINTENANCE_MODE", status: 503, retryable: true, details: { reason } }),
|
|
53
|
+
subjectBlocked: (reason) => new GuildGateError({ code: "SUBJECT_BLOCKED", status: 403, details: { reason } }),
|
|
54
|
+
oauthStateInvalid: () => new GuildGateError({ code: "OAUTH_STATE_INVALID", status: 400 }),
|
|
55
|
+
oauthFailed: (details) => new GuildGateError({ code: "OAUTH_FAILED", status: 502, retryable: true, details }),
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAS;IACb,MAAM,CAAS;IACf,SAAS,CAAU;IACnB,MAAM,CAAU;IAChB,OAAO,CAA2B;IAE3C,YAAY,KAQX;QACC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,IAAI,cAAc,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,aAAa,EAAE,CAAC,OAAe,EAAE,EAAE,CACjC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzF,sBAAsB,EAAE,GAAG,EAAE,CAC3B,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACtE,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAClF,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAClF,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC5E,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACvF,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzF,qBAAqB,EAAE,CAAC,WAAsB,EAAE,EAAE,CAChD,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC;IAChG,oBAAoB,EAAE,CAAC,WAAsB,EAAE,EAAE,CAC/C,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC;IAC/F,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAClF,WAAW,EAAE,CAAC,YAAoB,EAAE,EAAE,CACpC,IAAI,cAAc,CAAC;QACjB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,EAAE,YAAY,EAAE;KAC1B,CAAC;IACJ,YAAY,EAAE,CAAC,OAAiC,EAAE,EAAE,CAClD,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACrE,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAChG,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC5F,mBAAmB,EAAE,GAAG,EAAE,CACxB,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpF,gBAAgB,EAAE,CAAC,OAAiC,EAAE,EAAE,CACtD,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACzE,eAAe,EAAE,GAAG,EAAE,CACpB,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7E,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7F,mBAAmB,EAAE,CAAC,OAAiC,EAAE,EAAE,CACzD,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC7F,WAAW,EAAE,CAAC,MAAe,EAAE,EAAE,CAC/B,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IACrG,cAAc,EAAE,CAAC,MAAe,EAAE,EAAE,CAClC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IACnF,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzF,WAAW,EAAE,CAAC,OAAiC,EAAE,EAAE,CACjD,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;CACtF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/express.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../src/fastify.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/fastify.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastify.js","sourceRoot":"","sources":["../src/fastify.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DefinedAction } from "../action.js";
|
|
2
|
+
import type { GuildGateKernel } from "../kernel.js";
|
|
3
|
+
export interface ExpressRequestLike {
|
|
4
|
+
method: string;
|
|
5
|
+
path: string;
|
|
6
|
+
originalUrl?: string;
|
|
7
|
+
headers: Record<string, string | string[] | undefined>;
|
|
8
|
+
cookies?: Record<string, string | undefined>;
|
|
9
|
+
ip?: string;
|
|
10
|
+
body?: unknown;
|
|
11
|
+
params?: unknown;
|
|
12
|
+
query?: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface ExpressResponseLike {
|
|
15
|
+
status(code: number): ExpressResponseLike;
|
|
16
|
+
setHeader(name: string, value: string | number): void;
|
|
17
|
+
json(payload: unknown): unknown;
|
|
18
|
+
}
|
|
19
|
+
export type ExpressNextLike = (error?: unknown) => void;
|
|
20
|
+
export declare function createExpressHandler<I, O>(kernel: GuildGateKernel, action: DefinedAction<I, O>, options?: {
|
|
21
|
+
input?: (request: ExpressRequestLike) => unknown;
|
|
22
|
+
locale?: (request: ExpressRequestLike) => string | undefined;
|
|
23
|
+
}): (request: ExpressRequestLike, response: ExpressResponseLike, next: ExpressNextLike) => Promise<void>;
|
|
24
|
+
//# sourceMappingURL=express.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/http/express.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAExD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EACvC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC;IACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC9D,GACA,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAkDtG"}
|