@buape/carbon 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/package.json +12 -9
- package/dist/src/abstracts/BaseCommand.d.ts +15 -3
- package/dist/src/abstracts/BaseCommand.d.ts.map +1 -1
- package/dist/src/abstracts/BaseCommand.js +32 -3
- package/dist/src/abstracts/BaseCommand.js.map +1 -1
- package/dist/src/abstracts/BaseInteraction.d.ts.map +1 -1
- package/dist/src/abstracts/BaseInteraction.js +2 -2
- package/dist/src/abstracts/BaseInteraction.js.map +1 -1
- package/dist/src/abstracts/BaseListener.d.ts +7 -4
- package/dist/src/abstracts/BaseListener.d.ts.map +1 -1
- package/dist/src/abstracts/BaseListener.js.map +1 -1
- package/dist/src/abstracts/Plugin.d.ts +6 -0
- package/dist/src/abstracts/Plugin.d.ts.map +1 -1
- package/dist/src/abstracts/Plugin.js.map +1 -1
- package/dist/src/adapters/bun/index.d.ts +1 -1
- package/dist/src/adapters/bun/index.d.ts.map +1 -1
- package/dist/src/adapters/bun/index.js +6 -0
- package/dist/src/adapters/bun/index.js.map +1 -1
- package/dist/src/adapters/fetch/index.d.ts.map +1 -1
- package/dist/src/adapters/fetch/index.js +6 -0
- package/dist/src/adapters/fetch/index.js.map +1 -1
- package/dist/src/classes/Client.d.ts +96 -5
- package/dist/src/classes/Client.d.ts.map +1 -1
- package/dist/src/classes/Client.js +187 -12
- package/dist/src/classes/Client.js.map +1 -1
- package/dist/src/classes/EntryPointCommand.d.ts +11 -0
- package/dist/src/classes/EntryPointCommand.d.ts.map +1 -0
- package/dist/src/classes/EntryPointCommand.js +13 -0
- package/dist/src/classes/EntryPointCommand.js.map +1 -0
- package/dist/src/classes/Listener.d.ts +83 -81
- package/dist/src/classes/Listener.d.ts.map +1 -1
- package/dist/src/classes/Listener.js +14 -0
- package/dist/src/classes/Listener.js.map +1 -1
- package/dist/src/classes/RequestClient.d.ts +92 -17
- package/dist/src/classes/RequestClient.d.ts.map +1 -1
- package/dist/src/classes/RequestClient.js +207 -136
- package/dist/src/classes/RequestClient.js.map +1 -1
- package/dist/src/errors/RatelimitError.d.ts +4 -1
- package/dist/src/errors/RatelimitError.d.ts.map +1 -1
- package/dist/src/errors/RatelimitError.js +7 -1
- package/dist/src/errors/RatelimitError.js.map +1 -1
- 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/BoundedExecutor.d.ts +12 -0
- package/dist/src/internals/BoundedExecutor.d.ts.map +1 -0
- package/dist/src/internals/BoundedExecutor.js +60 -0
- package/dist/src/internals/BoundedExecutor.js.map +1 -0
- package/dist/src/internals/CommandHandler.d.ts.map +1 -1
- package/dist/src/internals/CommandHandler.js +53 -6
- package/dist/src/internals/CommandHandler.js.map +1 -1
- package/dist/src/internals/ComponentHandler.d.ts +2 -1
- package/dist/src/internals/ComponentHandler.d.ts.map +1 -1
- package/dist/src/internals/ComponentHandler.js +11 -4
- package/dist/src/internals/ComponentHandler.js.map +1 -1
- package/dist/src/internals/EventHandler.d.ts +18 -3
- package/dist/src/internals/EventHandler.d.ts.map +1 -1
- package/dist/src/internals/EventQueue.d.ts +43 -12
- package/dist/src/internals/EventQueue.d.ts.map +1 -1
- package/dist/src/internals/EventQueue.js +294 -62
- package/dist/src/internals/EventQueue.js.map +1 -1
- package/dist/src/internals/FieldsHandler.d.ts.map +1 -1
- package/dist/src/internals/FieldsHandler.js +10 -1
- package/dist/src/internals/FieldsHandler.js.map +1 -1
- package/dist/src/internals/RequestBody.d.ts +6 -0
- package/dist/src/internals/RequestBody.d.ts.map +1 -0
- package/dist/src/internals/RequestBody.js +74 -0
- package/dist/src/internals/RequestBody.js.map +1 -0
- package/dist/src/internals/RequestScheduler.d.ts +131 -0
- package/dist/src/internals/RequestScheduler.d.ts.map +1 -0
- package/dist/src/internals/RequestScheduler.js +245 -0
- package/dist/src/internals/RequestScheduler.js.map +1 -0
- package/dist/src/internals/TemporaryListenerManager.d.ts +3 -3
- package/dist/src/internals/TemporaryListenerManager.d.ts.map +1 -1
- package/dist/src/internals/TemporaryListenerManager.js +1 -1
- package/dist/src/internals/TemporaryListenerManager.js.map +1 -1
- package/dist/src/plugins/client-manager/ClientManager.d.ts +30 -2
- package/dist/src/plugins/client-manager/ClientManager.d.ts.map +1 -1
- package/dist/src/plugins/client-manager/ClientManager.js +86 -16
- package/dist/src/plugins/client-manager/ClientManager.js.map +1 -1
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayDurableObject.d.ts +43 -0
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayDurableObject.d.ts.map +1 -0
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayDurableObject.js +210 -0
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayDurableObject.js.map +1 -0
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayPlugin.d.ts +16 -0
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayPlugin.d.ts.map +1 -0
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayPlugin.js +129 -0
- package/dist/src/plugins/cloudflare-gateway/CloudflareGatewayPlugin.js.map +1 -0
- package/dist/src/plugins/cloudflare-gateway/index.d.ts +4 -0
- package/dist/src/plugins/cloudflare-gateway/index.d.ts.map +1 -0
- package/dist/src/plugins/cloudflare-gateway/index.js +4 -0
- package/dist/src/plugins/cloudflare-gateway/index.js.map +1 -0
- package/dist/src/plugins/cloudflare-gateway/types.d.ts +63 -0
- package/dist/src/plugins/cloudflare-gateway/types.d.ts.map +1 -0
- package/dist/src/plugins/cloudflare-gateway/types.js +2 -0
- package/dist/src/plugins/cloudflare-gateway/types.js.map +1 -0
- package/dist/src/plugins/gateway/GatewayPlugin.d.ts +108 -19
- package/dist/src/plugins/gateway/GatewayPlugin.d.ts.map +1 -1
- package/dist/src/plugins/gateway/GatewayPlugin.js +564 -253
- package/dist/src/plugins/gateway/GatewayPlugin.js.map +1 -1
- package/dist/src/plugins/gateway/types.d.ts +33 -1
- package/dist/src/plugins/gateway/types.d.ts.map +1 -1
- package/dist/src/plugins/gateway/types.js +21 -0
- package/dist/src/plugins/gateway/types.js.map +1 -1
- package/dist/src/plugins/gateway/utils/heartbeat.d.ts.map +1 -1
- package/dist/src/plugins/gateway/utils/heartbeat.js +10 -4
- package/dist/src/plugins/gateway/utils/heartbeat.js.map +1 -1
- package/dist/src/plugins/gateway/utils/payload.d.ts.map +1 -1
- package/dist/src/plugins/gateway/utils/payload.js +0 -4
- package/dist/src/plugins/gateway/utils/payload.js.map +1 -1
- package/dist/src/plugins/gateway-forwarder/GatewayForwarderPlugin.d.ts +56 -3
- package/dist/src/plugins/gateway-forwarder/GatewayForwarderPlugin.d.ts.map +1 -1
- package/dist/src/plugins/gateway-forwarder/GatewayForwarderPlugin.js +224 -21
- package/dist/src/plugins/gateway-forwarder/GatewayForwarderPlugin.js.map +1 -1
- package/dist/src/plugins/paginator/index.d.ts +1 -1
- package/dist/src/plugins/paginator/index.d.ts.map +1 -1
- package/dist/src/plugins/paginator/index.js +1 -1
- package/dist/src/plugins/paginator/index.js.map +1 -1
- package/dist/src/plugins/voice/VoicePlugin.d.ts.map +1 -1
- package/dist/src/plugins/voice/VoicePlugin.js +5 -1
- package/dist/src/plugins/voice/VoicePlugin.js.map +1 -1
- package/dist/src/plugins/voice/VoiceServerUpdateListener.d.ts +10 -0
- package/dist/src/plugins/voice/VoiceServerUpdateListener.d.ts.map +1 -0
- package/dist/src/plugins/voice/VoiceServerUpdateListener.js +16 -0
- package/dist/src/plugins/voice/VoiceServerUpdateListener.js.map +1 -0
- package/dist/src/plugins/voice/VoiceStateUpdateListener.d.ts +10 -0
- package/dist/src/plugins/voice/VoiceStateUpdateListener.d.ts.map +1 -0
- package/dist/src/plugins/voice/VoiceStateUpdateListener.js +21 -0
- package/dist/src/plugins/voice/VoiceStateUpdateListener.js.map +1 -0
- package/dist/src/structures/Guild.js +1 -1
- package/dist/src/structures/Guild.js.map +1 -1
- package/dist/src/structures/Poll.d.ts +1 -1
- package/dist/src/structures/Poll.d.ts.map +1 -1
- package/dist/src/structures/Webhook.d.ts +4 -2
- package/dist/src/structures/Webhook.d.ts.map +1 -1
- package/dist/src/structures/Webhook.js +42 -29
- package/dist/src/structures/Webhook.js.map +1 -1
- package/dist/src/types/commandMiddleware.d.ts +64 -0
- package/dist/src/types/commandMiddleware.d.ts.map +1 -0
- package/dist/src/types/commandMiddleware.js +2 -0
- package/dist/src/types/commandMiddleware.js.map +1 -0
- package/dist/src/types/index.d.ts +9 -5
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +1 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/listeners.d.ts +11 -2
- package/dist/src/types/listeners.d.ts.map +1 -1
- package/dist/src/types/listeners.js.map +1 -1
- package/dist/src/utils/payload.d.ts.map +1 -1
- package/dist/src/utils/payload.js +16 -0
- package/dist/src/utils/payload.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -9
|
@@ -6,7 +6,7 @@ import { Client } from "../../classes/Client.js";
|
|
|
6
6
|
*
|
|
7
7
|
* To use with a database, extend this class and override:
|
|
8
8
|
* - getClient(clientId) - Return the client for a specific ID (or create it)
|
|
9
|
-
* -
|
|
9
|
+
* - getClients() - Return all available clients
|
|
10
10
|
* - getClientIds() - Return all available client IDs
|
|
11
11
|
*
|
|
12
12
|
* Then call setupClient(credentials) to create clients on-demand.
|
|
@@ -33,6 +33,7 @@ export class ClientManager {
|
|
|
33
33
|
staticApplications;
|
|
34
34
|
initialHandlers;
|
|
35
35
|
initialPlugins;
|
|
36
|
+
startupPromise;
|
|
36
37
|
/**
|
|
37
38
|
* Creates a new ClientManager
|
|
38
39
|
* @param options Configuration options including shared settings and per-app credentials
|
|
@@ -45,15 +46,78 @@ export class ClientManager {
|
|
|
45
46
|
this.initialHandlers = handlers;
|
|
46
47
|
this.initialPlugins = plugins;
|
|
47
48
|
this.setupRoutes();
|
|
48
|
-
this.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
this.startupPromise = this.initializeClients(options.initialSetupOptions, options.startup);
|
|
50
|
+
void this.startupPromise.catch((error) => {
|
|
51
|
+
console.error("[ClientManager] Startup failed", error);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async whenReady() {
|
|
55
|
+
return this.startupPromise;
|
|
56
|
+
}
|
|
57
|
+
async initializeClients(initialSetupOptions, startupOptions) {
|
|
58
|
+
const applications = await this.getApplications();
|
|
59
|
+
if (applications.length === 0) {
|
|
60
|
+
return {
|
|
61
|
+
total: 0,
|
|
62
|
+
successes: 0,
|
|
63
|
+
failures: 0,
|
|
64
|
+
completedAt: Date.now(),
|
|
65
|
+
results: []
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const concurrency = Math.max(1, startupOptions?.concurrency ?? 4);
|
|
69
|
+
const failFast = startupOptions?.failFast ?? false;
|
|
70
|
+
let shouldStop = false;
|
|
71
|
+
let nextIndex = 0;
|
|
72
|
+
const results = [];
|
|
73
|
+
const workers = Array.from({ length: Math.min(concurrency, applications.length) }, async () => {
|
|
74
|
+
while (true) {
|
|
75
|
+
if (shouldStop)
|
|
76
|
+
return;
|
|
77
|
+
const application = applications[nextIndex];
|
|
78
|
+
nextIndex += 1;
|
|
79
|
+
if (!application)
|
|
80
|
+
return;
|
|
81
|
+
try {
|
|
82
|
+
await this.setupClient({
|
|
83
|
+
clientId: application.clientId,
|
|
84
|
+
publicKey: application.publicKey,
|
|
85
|
+
token: application.token
|
|
86
|
+
}, initialSetupOptions);
|
|
87
|
+
results.push({
|
|
88
|
+
clientId: application.clientId,
|
|
89
|
+
status: "success"
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
94
|
+
results.push({
|
|
95
|
+
clientId: application.clientId,
|
|
96
|
+
status: "error",
|
|
97
|
+
error: message
|
|
98
|
+
});
|
|
99
|
+
if (failFast) {
|
|
100
|
+
shouldStop = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
56
104
|
});
|
|
105
|
+
await Promise.all(workers);
|
|
106
|
+
const failures = results.filter((result) => result.status === "error").length;
|
|
107
|
+
const startupResult = {
|
|
108
|
+
total: applications.length,
|
|
109
|
+
successes: results.length - failures,
|
|
110
|
+
failures,
|
|
111
|
+
completedAt: Date.now(),
|
|
112
|
+
results
|
|
113
|
+
};
|
|
114
|
+
if (failFast && failures > 0) {
|
|
115
|
+
throw new Error(`ClientManager startup failed with ${failures} error(s): ${results
|
|
116
|
+
.filter((result) => result.status === "error")
|
|
117
|
+
.map((result) => `${result.clientId}: ${result.error ?? "unknown"}`)
|
|
118
|
+
.join("; ")}`);
|
|
119
|
+
}
|
|
120
|
+
return startupResult;
|
|
57
121
|
}
|
|
58
122
|
/**
|
|
59
123
|
* Setup a client from credentials.
|
|
@@ -143,7 +207,7 @@ export class ClientManager {
|
|
|
143
207
|
if (!client)
|
|
144
208
|
continue;
|
|
145
209
|
try {
|
|
146
|
-
await client.handleDeployRequest();
|
|
210
|
+
await client.handleDeployRequest(req);
|
|
147
211
|
results.push({ clientId, status: "success" });
|
|
148
212
|
}
|
|
149
213
|
catch (error) {
|
|
@@ -161,15 +225,13 @@ export class ClientManager {
|
|
|
161
225
|
* @param ctx Optional context (for Cloudflare Workers, etc.)
|
|
162
226
|
*/
|
|
163
227
|
async handleRequest(req, ctx) {
|
|
164
|
-
const url = new URL(req.url);
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
const reqPathname = url.pathname.replace(/\/$/, "");
|
|
168
|
-
if (!reqPathname.startsWith(basePathname)) {
|
|
228
|
+
const url = new URL(req.url, "http://localhost");
|
|
229
|
+
const pathname = resolveRequestPathname(new URL(this.baseUrl), url);
|
|
230
|
+
if (!pathname) {
|
|
169
231
|
await req.text().catch(() => { });
|
|
170
232
|
return new Response("Not Found: Invalid base URL", { status: 404 });
|
|
171
233
|
}
|
|
172
|
-
const truePathname =
|
|
234
|
+
const truePathname = pathname;
|
|
173
235
|
if (truePathname === "/deploy" && req.method === "GET") {
|
|
174
236
|
return this.handleGlobalDeploy(req);
|
|
175
237
|
}
|
|
@@ -250,4 +312,12 @@ export class ClientManager {
|
|
|
250
312
|
return /^\d{17,19}$/.test(id);
|
|
251
313
|
}
|
|
252
314
|
}
|
|
315
|
+
function resolveRequestPathname(baseUrl, reqUrl) {
|
|
316
|
+
// Need to use pathname only due to host name being different in Cloudflare Tunnel
|
|
317
|
+
const basePathname = baseUrl.pathname.replace(/\/$/, "");
|
|
318
|
+
const reqPathname = reqUrl.pathname.replace(/\/$/, "");
|
|
319
|
+
if (!reqPathname.startsWith(basePathname))
|
|
320
|
+
return null;
|
|
321
|
+
return reqPathname.slice(basePathname.length);
|
|
322
|
+
}
|
|
253
323
|
//# sourceMappingURL=ClientManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientManager.js","sourceRoot":"","sources":["../../../../src/plugins/client-manager/ClientManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAsB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"ClientManager.js","sourceRoot":"","sources":["../../../../src/plugins/client-manager/ClientManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { GatewayPlugin } from "../gateway/GatewayPlugin.js";
|
|
2
|
+
import type { CloudflareGatewayDurableObjectConfig, CloudflareGatewayForwardPayload } from "./types.js";
|
|
3
|
+
export declare class CloudflareGatewayDurableObject {
|
|
4
|
+
protected state: {
|
|
5
|
+
storage: {
|
|
6
|
+
get<T>(key: string): Promise<T | undefined>;
|
|
7
|
+
put(key: string, value: unknown): Promise<void>;
|
|
8
|
+
delete(key: string): Promise<boolean | number | undefined>;
|
|
9
|
+
setAlarm(time: number | Date): Promise<void>;
|
|
10
|
+
deleteAlarm?(): Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
protected config: CloudflareGatewayDurableObjectConfig | null;
|
|
14
|
+
protected gateway: GatewayPlugin | null;
|
|
15
|
+
protected bootstrap: Promise<void>;
|
|
16
|
+
protected connecting: Promise<void> | null;
|
|
17
|
+
constructor(state: {
|
|
18
|
+
storage: {
|
|
19
|
+
get<T>(key: string): Promise<T | undefined>;
|
|
20
|
+
put(key: string, value: unknown): Promise<void>;
|
|
21
|
+
delete(key: string): Promise<boolean | number | undefined>;
|
|
22
|
+
setAlarm(time: number | Date): Promise<void>;
|
|
23
|
+
deleteAlarm?(): Promise<void>;
|
|
24
|
+
};
|
|
25
|
+
}, _env: unknown);
|
|
26
|
+
fetch(request: Request): Promise<Response>;
|
|
27
|
+
alarm(): Promise<void>;
|
|
28
|
+
protected restore(): Promise<void>;
|
|
29
|
+
protected ensureConnected(): Promise<void>;
|
|
30
|
+
protected scheduleReconnectAlarm(): Promise<void>;
|
|
31
|
+
protected createClientBridge(config: CloudflareGatewayDurableObjectConfig): {
|
|
32
|
+
options: {
|
|
33
|
+
token: string;
|
|
34
|
+
clientId: string;
|
|
35
|
+
};
|
|
36
|
+
registerListener(): void;
|
|
37
|
+
eventHandler: {
|
|
38
|
+
handleEvent: (data: CloudflareGatewayForwardPayload["data"], type: CloudflareGatewayForwardPayload["type"]) => boolean;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
protected forwardEvent(config: CloudflareGatewayDurableObjectConfig, type: CloudflareGatewayForwardPayload["type"], data: CloudflareGatewayForwardPayload["data"]): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=CloudflareGatewayDurableObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudflareGatewayDurableObject.d.ts","sourceRoot":"","sources":["../../../../src/plugins/cloudflare-gateway/CloudflareGatewayDurableObject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,EACX,oCAAoC,EACpC,+BAA+B,EAC/B,MAAM,YAAY,CAAA;AAUnB,qBAAa,8BAA8B;IAC1C,SAAS,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE;YACR,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;YAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;YAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YAC5C,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;SAC7B,CAAA;KACD,CAAA;IACD,SAAS,CAAC,MAAM,EAAE,oCAAoC,GAAG,IAAI,CAAO;IACpE,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAO;IAC9C,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAO;gBAGhD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;YAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;YAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YAC5C,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;SAC7B,CAAA;KACD,EACD,IAAI,EAAE,OAAO;IAMR,KAAK,CAAC,OAAO,EAAE,OAAO;IA6CtB,KAAK;cASK,OAAO;cAiBP,eAAe;cAwCf,sBAAsB;IAOtC,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,oCAAoC;;;;;;;gCAS/D,+BAA+B,CAAC,MAAM,CAAC,QACvC,+BAA+B,CAAC,MAAM,CAAC;;;cASjC,YAAY,CAC3B,MAAM,EAAE,oCAAoC,EAC5C,IAAI,EAAE,+BAA+B,CAAC,MAAM,CAAC,EAC7C,IAAI,EAAE,+BAA+B,CAAC,MAAM,CAAC;CA0B9C"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { GatewayPlugin } from "../gateway/GatewayPlugin.js";
|
|
2
|
+
const gatewayConfigStorageKey = "gateway-config";
|
|
3
|
+
const connectPath = "/connect";
|
|
4
|
+
const disconnectPath = "/disconnect";
|
|
5
|
+
const statusPath = "/status";
|
|
6
|
+
const reconnectAlarmIntervalMs = 60_000;
|
|
7
|
+
const defaultForwardPath = "/__carbon/gateway-events";
|
|
8
|
+
const defaultSecretHeader = "x-carbon-gateway-secret";
|
|
9
|
+
export class CloudflareGatewayDurableObject {
|
|
10
|
+
state;
|
|
11
|
+
config = null;
|
|
12
|
+
gateway = null;
|
|
13
|
+
bootstrap;
|
|
14
|
+
connecting = null;
|
|
15
|
+
constructor(state, _env) {
|
|
16
|
+
this.state = state;
|
|
17
|
+
this.bootstrap = this.restore();
|
|
18
|
+
}
|
|
19
|
+
async fetch(request) {
|
|
20
|
+
await this.bootstrap;
|
|
21
|
+
const url = new URL(request.url);
|
|
22
|
+
if (request.method === "POST" && url.pathname === connectPath) {
|
|
23
|
+
const payload = (await request.json());
|
|
24
|
+
const normalized = normalizeGatewayConfig(payload);
|
|
25
|
+
if (!normalized) {
|
|
26
|
+
return new Response("Bad Request", { status: 400 });
|
|
27
|
+
}
|
|
28
|
+
const hasChanged = !this.config ||
|
|
29
|
+
JSON.stringify(this.config) !== JSON.stringify(normalized);
|
|
30
|
+
this.config = normalized;
|
|
31
|
+
await this.state.storage.put(gatewayConfigStorageKey, normalized);
|
|
32
|
+
if (hasChanged && this.gateway) {
|
|
33
|
+
this.gateway.disconnect();
|
|
34
|
+
this.gateway = null;
|
|
35
|
+
}
|
|
36
|
+
await this.ensureConnected();
|
|
37
|
+
await this.scheduleReconnectAlarm();
|
|
38
|
+
return Response.json({ status: "connected" });
|
|
39
|
+
}
|
|
40
|
+
if (request.method === "POST" && url.pathname === disconnectPath) {
|
|
41
|
+
this.gateway?.disconnect();
|
|
42
|
+
this.gateway = null;
|
|
43
|
+
this.config = null;
|
|
44
|
+
await this.state.storage.delete(gatewayConfigStorageKey);
|
|
45
|
+
await this.state.storage.deleteAlarm?.();
|
|
46
|
+
return Response.json({ status: "disconnected" });
|
|
47
|
+
}
|
|
48
|
+
if (request.method === "GET" && url.pathname === statusPath) {
|
|
49
|
+
return Response.json({
|
|
50
|
+
configured: Boolean(this.config),
|
|
51
|
+
connected: Boolean(this.gateway?.isConnected)
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return new Response("Not Found", { status: 404 });
|
|
55
|
+
}
|
|
56
|
+
async alarm() {
|
|
57
|
+
await this.bootstrap;
|
|
58
|
+
if (!this.config) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
await this.ensureConnected();
|
|
62
|
+
await this.scheduleReconnectAlarm();
|
|
63
|
+
}
|
|
64
|
+
async restore() {
|
|
65
|
+
const stored = await this.state.storage.get(gatewayConfigStorageKey);
|
|
66
|
+
const normalized = normalizeGatewayConfig(stored);
|
|
67
|
+
if (!normalized) {
|
|
68
|
+
this.config = null;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.config = normalized;
|
|
72
|
+
if (JSON.stringify(stored) !== JSON.stringify(normalized)) {
|
|
73
|
+
await this.state.storage.put(gatewayConfigStorageKey, normalized);
|
|
74
|
+
}
|
|
75
|
+
await this.ensureConnected();
|
|
76
|
+
await this.scheduleReconnectAlarm();
|
|
77
|
+
}
|
|
78
|
+
async ensureConnected() {
|
|
79
|
+
if (!this.config) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (this.connecting) {
|
|
83
|
+
await this.connecting;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (this.gateway?.isConnected) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (this.gateway) {
|
|
90
|
+
this.gateway.connect(true);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
this.connecting = (async () => {
|
|
94
|
+
if (!this.config) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const gateway = new GatewayPlugin({
|
|
98
|
+
intents: this.config.gateway.intents,
|
|
99
|
+
autoInteractions: this.config.gateway.autoInteractions,
|
|
100
|
+
reconnect: this.config.gateway.reconnect
|
|
101
|
+
});
|
|
102
|
+
await gateway.registerClient(this.createClientBridge(this.config));
|
|
103
|
+
this.gateway = gateway;
|
|
104
|
+
})();
|
|
105
|
+
try {
|
|
106
|
+
await this.connecting;
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
this.connecting = null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async scheduleReconnectAlarm() {
|
|
113
|
+
if (!this.config) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
await this.state.storage.setAlarm(Date.now() + reconnectAlarmIntervalMs);
|
|
117
|
+
}
|
|
118
|
+
createClientBridge(config) {
|
|
119
|
+
return {
|
|
120
|
+
options: {
|
|
121
|
+
token: config.token,
|
|
122
|
+
clientId: config.clientId
|
|
123
|
+
},
|
|
124
|
+
registerListener() { },
|
|
125
|
+
eventHandler: {
|
|
126
|
+
handleEvent: (data, type) => {
|
|
127
|
+
void this.forwardEvent(config, type, data);
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
async forwardEvent(config, type, data) {
|
|
134
|
+
try {
|
|
135
|
+
const response = await fetch(`${config.baseUrl}${config.forwardPath}`, {
|
|
136
|
+
method: "POST",
|
|
137
|
+
headers: {
|
|
138
|
+
"content-type": "application/json",
|
|
139
|
+
[config.secretHeader]: config.deploySecret
|
|
140
|
+
},
|
|
141
|
+
body: JSON.stringify({
|
|
142
|
+
type,
|
|
143
|
+
data
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
if (!response.ok) {
|
|
147
|
+
console.error(`[CloudflareGatewayDurableObject] Failed to forward event ${String(type)}: ${response.status}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
console.error(`[CloudflareGatewayDurableObject] Failed to forward event ${String(type)}`, error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function normalizeGatewayConfig(value) {
|
|
156
|
+
if (!value || typeof value !== "object") {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const payload = value;
|
|
160
|
+
const baseUrl = typeof payload.baseUrl === "string"
|
|
161
|
+
? payload.baseUrl.replace(/\/+$/, "")
|
|
162
|
+
: "";
|
|
163
|
+
const deploySecret = typeof payload.deploySecret === "string" ? payload.deploySecret : "";
|
|
164
|
+
const token = typeof payload.token === "string" ? payload.token : "";
|
|
165
|
+
const clientId = typeof payload.clientId === "string" ? payload.clientId : "";
|
|
166
|
+
if (!baseUrl || !deploySecret || !token || !clientId) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const nestedGateway = payload.gateway;
|
|
170
|
+
const hasNestedGateway = nestedGateway && typeof nestedGateway === "object";
|
|
171
|
+
const intents = hasNestedGateway && typeof nestedGateway.intents === "number"
|
|
172
|
+
? nestedGateway.intents
|
|
173
|
+
: typeof payload.intents === "number"
|
|
174
|
+
? payload.intents
|
|
175
|
+
: null;
|
|
176
|
+
if (intents === null) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
const autoInteractions = hasNestedGateway
|
|
180
|
+
? typeof nestedGateway.autoInteractions === "boolean"
|
|
181
|
+
? nestedGateway.autoInteractions
|
|
182
|
+
: undefined
|
|
183
|
+
: typeof payload.autoInteractions === "boolean"
|
|
184
|
+
? payload.autoInteractions
|
|
185
|
+
: undefined;
|
|
186
|
+
const reconnect = hasNestedGateway
|
|
187
|
+
? nestedGateway.reconnect
|
|
188
|
+
: payload.reconnect;
|
|
189
|
+
const forwardPath = typeof payload.forwardPath === "string" &&
|
|
190
|
+
payload.forwardPath.startsWith("/")
|
|
191
|
+
? payload.forwardPath
|
|
192
|
+
: defaultForwardPath;
|
|
193
|
+
const secretHeader = typeof payload.secretHeader === "string"
|
|
194
|
+
? payload.secretHeader
|
|
195
|
+
: defaultSecretHeader;
|
|
196
|
+
return {
|
|
197
|
+
baseUrl,
|
|
198
|
+
deploySecret,
|
|
199
|
+
token,
|
|
200
|
+
clientId,
|
|
201
|
+
forwardPath,
|
|
202
|
+
secretHeader,
|
|
203
|
+
gateway: {
|
|
204
|
+
intents,
|
|
205
|
+
autoInteractions,
|
|
206
|
+
reconnect: reconnect
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=CloudflareGatewayDurableObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudflareGatewayDurableObject.js","sourceRoot":"","sources":["../../../../src/plugins/cloudflare-gateway/CloudflareGatewayDurableObject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Context, Plugin } from "../../abstracts/Plugin.js";
|
|
2
|
+
import type { Client } from "../../classes/Client.js";
|
|
3
|
+
import type { CloudflareGatewayPluginOptions } from "./types.js";
|
|
4
|
+
export declare class CloudflareGatewayPlugin extends Plugin {
|
|
5
|
+
readonly id = "cloudflare-gateway";
|
|
6
|
+
readonly options: Required<Omit<CloudflareGatewayPluginOptions, "reconnect" | "autoInteractions">> & Pick<CloudflareGatewayPluginOptions, "reconnect" | "autoInteractions">;
|
|
7
|
+
protected client?: Client;
|
|
8
|
+
protected lastConnectAttempt: number;
|
|
9
|
+
constructor(options: CloudflareGatewayPluginOptions);
|
|
10
|
+
registerClient(client: Client): void;
|
|
11
|
+
registerRoutes(client: Client): void;
|
|
12
|
+
onRequest(req: Request, ctx: Context): undefined;
|
|
13
|
+
protected handleForwardRequest(req: Request): Promise<Response>;
|
|
14
|
+
protected connectDurableObject(env: Record<string, unknown>): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=CloudflareGatewayPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudflareGatewayPlugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/cloudflare-gateway/CloudflareGatewayPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAMrD,OAAO,KAAK,EAGX,8BAA8B,EAC9B,MAAM,YAAY,CAAA;AAWnB,qBAAa,uBAAwB,SAAQ,MAAM;IAClD,QAAQ,CAAC,EAAE,wBAAuB;IAClC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CACzB,IAAI,CAAC,8BAA8B,EAAE,WAAW,GAAG,kBAAkB,CAAC,CACtE,GACA,IAAI,CAAC,8BAA8B,EAAE,WAAW,GAAG,kBAAkB,CAAC,CAAA;IACvE,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,kBAAkB,SAAI;gBAEpB,OAAO,EAAE,8BAA8B;IAQnD,cAAc,CAAC,MAAM,EAAE,MAAM;IAM7B,cAAc,CAAC,MAAM,EAAE,MAAM;IAQ7B,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,SAAS;cAgChC,oBAAoB,CAAC,GAAG,EAAE,OAAO;cA8BjC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAqEjE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Plugin } from "../../abstracts/Plugin.js";
|
|
2
|
+
const defaults = {
|
|
3
|
+
forwardPath: "/__carbon/gateway-events",
|
|
4
|
+
secretHeader: "x-carbon-gateway-secret",
|
|
5
|
+
durableObjectBinding: "CARBON_GATEWAY",
|
|
6
|
+
durableObjectName: "default",
|
|
7
|
+
connectPath: "/connect",
|
|
8
|
+
connectDebounceMs: 10_000
|
|
9
|
+
};
|
|
10
|
+
export class CloudflareGatewayPlugin extends Plugin {
|
|
11
|
+
id = "cloudflare-gateway";
|
|
12
|
+
options;
|
|
13
|
+
client;
|
|
14
|
+
lastConnectAttempt = 0;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
super();
|
|
17
|
+
this.options = {
|
|
18
|
+
...defaults,
|
|
19
|
+
...options
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
registerClient(client) {
|
|
23
|
+
this.client = client;
|
|
24
|
+
// Workers + forwarded gateway listeners should avoid cross-request scheduler promises.
|
|
25
|
+
client.rest.options.queueRequests = false;
|
|
26
|
+
}
|
|
27
|
+
registerRoutes(client) {
|
|
28
|
+
client.routes.push({
|
|
29
|
+
method: "POST",
|
|
30
|
+
path: this.options.forwardPath,
|
|
31
|
+
handler: this.handleForwardRequest.bind(this)
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
onRequest(req, ctx) {
|
|
35
|
+
if (!this.client) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
if (now - this.lastConnectAttempt < this.options.connectDebounceMs) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const url = new URL(req.url);
|
|
43
|
+
if (url.pathname === this.options.forwardPath) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const envValue = ctx && typeof ctx === "object" ? Reflect.get(ctx, "env") : null;
|
|
47
|
+
if (!envValue || typeof envValue !== "object") {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const env = envValue;
|
|
51
|
+
this.lastConnectAttempt = now;
|
|
52
|
+
const connectPromise = this.connectDurableObject(env).catch((error) => {
|
|
53
|
+
console.error("[CloudflareGatewayPlugin] Failed to connect durable object", error);
|
|
54
|
+
});
|
|
55
|
+
ctx.waitUntil?.(connectPromise);
|
|
56
|
+
}
|
|
57
|
+
async handleForwardRequest(req) {
|
|
58
|
+
if (!this.client) {
|
|
59
|
+
return new Response("Service Unavailable", { status: 503 });
|
|
60
|
+
}
|
|
61
|
+
const deploySecret = typeof process === "undefined" ? "" : (process.env?.DEPLOY_SECRET ?? "");
|
|
62
|
+
if (req.headers.get(this.options.secretHeader) !== deploySecret) {
|
|
63
|
+
return new Response("Unauthorized", { status: 401 });
|
|
64
|
+
}
|
|
65
|
+
const payload = (await req.json());
|
|
66
|
+
if (!payload.type || !payload.data) {
|
|
67
|
+
return new Response("Bad Request", { status: 400 });
|
|
68
|
+
}
|
|
69
|
+
const type = payload.type;
|
|
70
|
+
const rawPayload = {
|
|
71
|
+
...payload.data,
|
|
72
|
+
clientId: this.client.options.clientId
|
|
73
|
+
};
|
|
74
|
+
const accepted = this.client.eventHandler.handleEvent(rawPayload, type);
|
|
75
|
+
if (!accepted) {
|
|
76
|
+
return new Response("Service Unavailable", { status: 503 });
|
|
77
|
+
}
|
|
78
|
+
return new Response(null, { status: 204 });
|
|
79
|
+
}
|
|
80
|
+
async connectDurableObject(env) {
|
|
81
|
+
const namespaceValue = env[this.options.durableObjectBinding];
|
|
82
|
+
if (!namespaceValue || typeof namespaceValue !== "object") {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const namespaceMethods = namespaceValue;
|
|
86
|
+
if (typeof namespaceMethods.idFromName !== "function" ||
|
|
87
|
+
typeof namespaceMethods.get !== "function") {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const processEnv = typeof process === "undefined" ? undefined : process.env;
|
|
91
|
+
const baseUrl = processEnv?.BASE_URL ?? env.BASE_URL ?? "";
|
|
92
|
+
const deploySecret = processEnv?.DEPLOY_SECRET ??
|
|
93
|
+
env.DEPLOY_SECRET ??
|
|
94
|
+
"";
|
|
95
|
+
const token = processEnv?.DISCORD_BOT_TOKEN ??
|
|
96
|
+
env.DISCORD_BOT_TOKEN ??
|
|
97
|
+
"";
|
|
98
|
+
const clientId = processEnv?.DISCORD_CLIENT_ID ??
|
|
99
|
+
env.DISCORD_CLIENT_ID ??
|
|
100
|
+
"";
|
|
101
|
+
if (!baseUrl || !deploySecret || !token || !clientId) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const config = {
|
|
105
|
+
baseUrl,
|
|
106
|
+
deploySecret,
|
|
107
|
+
token,
|
|
108
|
+
clientId,
|
|
109
|
+
forwardPath: this.options.forwardPath,
|
|
110
|
+
secretHeader: this.options.secretHeader,
|
|
111
|
+
gateway: {
|
|
112
|
+
intents: this.options.intents,
|
|
113
|
+
autoInteractions: this.options.autoInteractions,
|
|
114
|
+
reconnect: this.options.reconnect
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const namespace = namespaceValue;
|
|
118
|
+
const id = namespace.idFromName(this.options.durableObjectName);
|
|
119
|
+
const stub = namespace.get(id);
|
|
120
|
+
await stub.fetch(`https://carbon.gateway${this.options.connectPath}`, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
headers: {
|
|
123
|
+
"content-type": "application/json"
|
|
124
|
+
},
|
|
125
|
+
body: JSON.stringify(config)
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=CloudflareGatewayPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudflareGatewayPlugin.js","sourceRoot":"","sources":["../../../../src/plugins/cloudflare-gateway/CloudflareGatewayPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/cloudflare-gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAA;AACnD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/cloudflare-gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAA;AACnD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,YAAY,CAAA"}
|