@seedcord/core 0.1.0-next.5 → 0.1.0-next.7
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/{AutocompleteOptions-eB87SZ4a.d.mts → AutocompleteOptions-DLp_B8as.d.mts} +66 -124
- package/dist/HmrModuleHandler-3sNgKHdf.mjs +163 -0
- package/dist/HmrModuleHandler-3sNgKHdf.mjs.map +1 -0
- package/dist/HmrModuleHandler-CTBng7wV.cjs +170 -0
- package/dist/HmrModuleHandler-CTBng7wV.cjs.map +1 -0
- package/dist/Plugin-3rlH0uxH.d.mts +620 -0
- package/dist/Plugin-Cgp1a0uQ.cjs +123 -0
- package/dist/Plugin-Cgp1a0uQ.cjs.map +1 -0
- package/dist/Plugin-j9GYdroS.mjs +106 -0
- package/dist/Plugin-j9GYdroS.mjs.map +1 -0
- package/dist/{permissions-DQL5ViZn.cjs → Silence-DiP95iwD.cjs} +54 -305
- package/dist/Silence-DiP95iwD.cjs.map +1 -0
- package/dist/{permissions-SokZLJMj.mjs → Silence-dbC2slOB.mjs} +47 -238
- package/dist/Silence-dbC2slOB.mjs.map +1 -0
- package/dist/basic-D7bDlgSP.d.mts +10 -0
- package/dist/devChannel-CQU7hq7Q.mjs +14 -0
- package/dist/devChannel-CQU7hq7Q.mjs.map +1 -0
- package/dist/devChannel-CoCmAVDx.cjs +26 -0
- package/dist/devChannel-CoCmAVDx.cjs.map +1 -0
- package/dist/hmr.index.cjs +2 -164
- package/dist/hmr.index.mjs +2 -162
- package/dist/index-Dueqztyy.d.mts +142 -0
- package/dist/index.cjs +53 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +7 -4
- package/dist/index.mjs +9 -35
- package/dist/index.mjs.map +1 -1
- package/dist/internal.index.cjs +267 -89
- package/dist/internal.index.cjs.map +1 -1
- package/dist/internal.index.d.mts +68 -3
- package/dist/internal.index.mjs +218 -48
- package/dist/internal.index.mjs.map +1 -1
- package/dist/node-internal.index.cjs +716 -0
- package/dist/node-internal.index.cjs.map +1 -0
- package/dist/node-internal.index.d.cts +1 -0
- package/dist/node-internal.index.d.mts +261 -0
- package/dist/node-internal.index.mjs +706 -0
- package/dist/node-internal.index.mjs.map +1 -0
- package/dist/phases-BfpAG6w3.mjs +31 -0
- package/dist/phases-BfpAG6w3.mjs.map +1 -0
- package/dist/phases-C_BGNyVo.cjs +43 -0
- package/dist/phases-C_BGNyVo.cjs.map +1 -0
- package/dist/plugin.index.cjs +4 -0
- package/dist/plugin.index.d.cts +1 -0
- package/dist/plugin.index.d.mts +3 -0
- package/dist/plugin.index.mjs +3 -0
- package/dist/publishDefault-CCf1azzW.mjs +264 -0
- package/dist/publishDefault-CCf1azzW.mjs.map +1 -0
- package/dist/publishDefault-l0NQ-SHo.cjs +353 -0
- package/dist/publishDefault-l0NQ-SHo.cjs.map +1 -0
- package/dist/subscribers-B1G6_LlK.cjs +517 -0
- package/dist/subscribers-B1G6_LlK.cjs.map +1 -0
- package/dist/subscribers-DYqFVP1X.mjs +480 -0
- package/dist/subscribers-DYqFVP1X.mjs.map +1 -0
- package/package.json +25 -13
- package/dist/hmr.index.cjs.map +0 -1
- package/dist/hmr.index.mjs.map +0 -1
- package/dist/is-never-Ddaba1Su.d.mts +0 -58
- package/dist/node.index.cjs +0 -521
- package/dist/node.index.cjs.map +0 -1
- package/dist/node.index.d.cts +0 -1
- package/dist/node.index.d.mts +0 -2391
- package/dist/node.index.mjs +0 -513
- package/dist/node.index.mjs.map +0 -1
- package/dist/permissions-DQL5ViZn.cjs.map +0 -1
- package/dist/permissions-SokZLJMj.mjs.map +0 -1
package/dist/internal.index.cjs
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_rolldown_runtime = require('./rolldown-runtime-C_NdSu1c.cjs');
|
|
3
|
-
const
|
|
3
|
+
const require_publishDefault = require('./publishDefault-l0NQ-SHo.cjs');
|
|
4
|
+
const require_Silence = require('./Silence-DiP95iwD.cjs');
|
|
5
|
+
const require_devChannel = require('./devChannel-CoCmAVDx.cjs');
|
|
4
6
|
require("reflect-metadata");
|
|
5
7
|
let _seedcord_errors = require("@seedcord/errors");
|
|
6
8
|
let _seedcord_errors_internal = require("@seedcord/errors/internal");
|
|
7
|
-
let discord_api_types_v10 = require("discord-api-types/v10");
|
|
8
9
|
let _discordjs_builders = require("@discordjs/builders");
|
|
9
10
|
let _seedcord_logger = require("@seedcord/logger");
|
|
10
11
|
let _seedcord_utils = require("@seedcord/utils");
|
|
11
|
-
let envapt = require("envapt");
|
|
12
12
|
let chalk = require("chalk");
|
|
13
13
|
chalk = require_rolldown_runtime.__toESM(chalk, 1);
|
|
14
|
+
let envapt = require("envapt");
|
|
14
15
|
|
|
15
16
|
//#region src/gates/runGates.ts
|
|
16
17
|
function routeIdOf(handlerCtor) {
|
|
17
|
-
for (const [kind, key] of Object.entries(
|
|
18
|
+
for (const [kind, key] of Object.entries(require_publishDefault.InteractionRouteKeys)) {
|
|
18
19
|
const routes = Reflect.getMetadata(key, handlerCtor);
|
|
19
20
|
if (routes?.length) return `${kind}:${routes.join(",")}`;
|
|
20
21
|
}
|
|
@@ -23,7 +24,7 @@ function routeIdOf(handlerCtor) {
|
|
|
23
24
|
async function timedCheck(gate, ctx, observe) {
|
|
24
25
|
const start = performance.now();
|
|
25
26
|
try {
|
|
26
|
-
await
|
|
27
|
+
await require_Silence.runCheck(gate, ctx);
|
|
27
28
|
} finally {
|
|
28
29
|
observe(gate.name, performance.now() - start);
|
|
29
30
|
}
|
|
@@ -35,14 +36,14 @@ async function timedCheck(gate, ctx, observe) {
|
|
|
35
36
|
*/
|
|
36
37
|
async function runGates(gates, ctx, observe) {
|
|
37
38
|
try {
|
|
38
|
-
for (const gate of gates) await (observe ? timedCheck(gate, ctx, observe) :
|
|
39
|
-
await
|
|
39
|
+
for (const gate of gates) await (observe ? timedCheck(gate, ctx, observe) : require_Silence.runCheck(gate, ctx));
|
|
40
|
+
await require_Silence.runCommits(ctx);
|
|
40
41
|
} finally {
|
|
41
|
-
|
|
42
|
+
require_Silence.discardCommits(ctx);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
async function runHandlerGates(handlerCtor, ctx, routeId, observe) {
|
|
45
|
-
const gates = Reflect.getMetadata(
|
|
46
|
+
const gates = Reflect.getMetadata(require_publishDefault.GatedMetadataKey, handlerCtor);
|
|
46
47
|
if (!gates) return;
|
|
47
48
|
await runGates(gates, {
|
|
48
49
|
...ctx,
|
|
@@ -55,7 +56,7 @@ async function runHandlerGates(handlerCtor, ctx, routeId, observe) {
|
|
|
55
56
|
const SLOW_GATE_MS = 750;
|
|
56
57
|
let gateLogger;
|
|
57
58
|
function logger() {
|
|
58
|
-
gateLogger ??= new _seedcord_logger.Logger("Gates");
|
|
59
|
+
gateLogger ??= new _seedcord_logger.Logger("Gates", { channel: "gates" });
|
|
59
60
|
return gateLogger;
|
|
60
61
|
}
|
|
61
62
|
function slowGateMonitor() {
|
|
@@ -76,18 +77,6 @@ function slowGateMonitor() {
|
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
79
|
|
|
79
|
-
//#endregion
|
|
80
|
-
//#region src/hmr/devChannel.ts
|
|
81
|
-
let channel;
|
|
82
|
-
/** @internal */
|
|
83
|
-
function setDevChannel(next) {
|
|
84
|
-
channel = next;
|
|
85
|
-
}
|
|
86
|
-
/** @internal */
|
|
87
|
-
function getDevChannel() {
|
|
88
|
-
return channel;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
80
|
//#endregion
|
|
92
81
|
//#region src/hmr/wrapHot.ts
|
|
93
82
|
/**
|
|
@@ -111,7 +100,7 @@ var HmrManager = class {
|
|
|
111
100
|
init() {
|
|
112
101
|
if (!{}.hot) return;
|
|
113
102
|
const channel = wrapHot({}.hot);
|
|
114
|
-
setDevChannel(channel);
|
|
103
|
+
require_devChannel.setDevChannel(channel);
|
|
115
104
|
if (envapt.Envapter.isDevelopment || envapt.Envapter.isTest) {
|
|
116
105
|
this.logger.info("Enabled");
|
|
117
106
|
channel.on("seedcord:hmr", (payload) => {
|
|
@@ -135,34 +124,27 @@ var HmrManager = class {
|
|
|
135
124
|
try {
|
|
136
125
|
await listener.onHmr(event);
|
|
137
126
|
} catch (error) {
|
|
138
|
-
this.logger.error(`Error handling HMR update in ${chalk.default.bold(listener.name)}: `, error);
|
|
127
|
+
this.logger.error(`Error handling HMR update in ${chalk.default.bold(listener.constructor.name)}: `, error);
|
|
139
128
|
}
|
|
140
129
|
});
|
|
141
130
|
await Promise.all(promises);
|
|
142
131
|
}
|
|
143
132
|
};
|
|
144
133
|
|
|
134
|
+
//#endregion
|
|
135
|
+
//#region src/stops/asError.ts
|
|
136
|
+
/** @internal */
|
|
137
|
+
function asError(caught) {
|
|
138
|
+
return Error.isError(caught) ? caught : new Error(String(caught), { cause: caught });
|
|
139
|
+
}
|
|
140
|
+
|
|
145
141
|
//#endregion
|
|
146
142
|
//#region src/pagination/cursor.ts
|
|
147
143
|
const PAGE_MAX = 1e6;
|
|
148
144
|
const SLOT_MAX = 4;
|
|
149
145
|
/** Build the page cursor for a paginator. */
|
|
150
146
|
function pageCursor(prefix) {
|
|
151
|
-
return new
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
//#endregion
|
|
155
|
-
//#region src/reply/flags.ts
|
|
156
|
-
/** IsComponentsV2 is unconditional, every framework reply is v2. */
|
|
157
|
-
function sendFlags(opts) {
|
|
158
|
-
let flags = discord_api_types_v10.MessageFlags.IsComponentsV2;
|
|
159
|
-
if (opts?.ephemeral ?? true) flags |= discord_api_types_v10.MessageFlags.Ephemeral;
|
|
160
|
-
if (opts?.silent) flags |= discord_api_types_v10.MessageFlags.SuppressNotifications;
|
|
161
|
-
return flags;
|
|
162
|
-
}
|
|
163
|
-
/** A deferral carries no content, so only Ephemeral applies. */
|
|
164
|
-
function deferFlags(opts) {
|
|
165
|
-
return opts?.ephemeral ?? true ? discord_api_types_v10.MessageFlags.Ephemeral : 0;
|
|
147
|
+
return new require_Silence.CustomId(prefix).int("page", 0, PAGE_MAX).int("slot", 0, SLOT_MAX);
|
|
166
148
|
}
|
|
167
149
|
|
|
168
150
|
//#endregion
|
|
@@ -262,6 +244,60 @@ var AckTrace = class extends Error {
|
|
|
262
244
|
}
|
|
263
245
|
};
|
|
264
246
|
|
|
247
|
+
//#endregion
|
|
248
|
+
//#region src/reply/responseReport.ts
|
|
249
|
+
/** @internal */
|
|
250
|
+
function publishResponse(telemetry, report) {
|
|
251
|
+
if (!telemetry) return;
|
|
252
|
+
telemetry.bus[require_publishDefault.PublishDefault]("responseAttempted", {
|
|
253
|
+
routeId: report.routeId,
|
|
254
|
+
interactionId: telemetry.interactionId,
|
|
255
|
+
method: report.method,
|
|
256
|
+
outcome: report.outcome,
|
|
257
|
+
durationMs: performance.now() - report.startedAt,
|
|
258
|
+
messageId: report.messageId,
|
|
259
|
+
...report.error && { error: report.error }
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Runs a write that returns no message and publishes whichever arm it takes.
|
|
264
|
+
*
|
|
265
|
+
* @internal
|
|
266
|
+
*/
|
|
267
|
+
async function reportedWrite(telemetry, routeId, method, write) {
|
|
268
|
+
const startedAt = performance.now();
|
|
269
|
+
const result = await attemptWrite(telemetry, routeId, method, startedAt, write);
|
|
270
|
+
publishResponse(telemetry, {
|
|
271
|
+
routeId,
|
|
272
|
+
method,
|
|
273
|
+
startedAt,
|
|
274
|
+
outcome: "sent",
|
|
275
|
+
messageId: null
|
|
276
|
+
});
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Runs a wire write and publishes the `failed` arm when it throws, since the caller's success report
|
|
281
|
+
* sits after the write and a throw skips it.
|
|
282
|
+
*
|
|
283
|
+
* @internal
|
|
284
|
+
*/
|
|
285
|
+
async function attemptWrite(telemetry, routeId, method, startedAt, write) {
|
|
286
|
+
try {
|
|
287
|
+
return await write();
|
|
288
|
+
} catch (caught) {
|
|
289
|
+
publishResponse(telemetry, {
|
|
290
|
+
routeId,
|
|
291
|
+
method,
|
|
292
|
+
startedAt,
|
|
293
|
+
outcome: "failed",
|
|
294
|
+
messageId: null,
|
|
295
|
+
error: asError(caught)
|
|
296
|
+
});
|
|
297
|
+
throw caught;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
265
301
|
//#endregion
|
|
266
302
|
//#region src/reply/translateSerialization.ts
|
|
267
303
|
const MAX_DEPTH = 8;
|
|
@@ -406,28 +442,49 @@ function serializeReply(response, routeId) {
|
|
|
406
442
|
*/
|
|
407
443
|
var BaseReplySender = class {
|
|
408
444
|
routeId;
|
|
445
|
+
telemetry;
|
|
409
446
|
state;
|
|
410
447
|
sent = /* @__PURE__ */ new Set();
|
|
411
448
|
ackedBy;
|
|
412
|
-
constructor(routeId, initialState = "unacked") {
|
|
449
|
+
constructor(routeId, initialState = "unacked", telemetry) {
|
|
413
450
|
this.routeId = routeId;
|
|
451
|
+
this.telemetry = telemetry;
|
|
414
452
|
this.state = initialState;
|
|
415
453
|
}
|
|
454
|
+
report(method, startedAt, outcome, messageId) {
|
|
455
|
+
publishResponse(this.telemetry, {
|
|
456
|
+
routeId: this.routeId,
|
|
457
|
+
method,
|
|
458
|
+
startedAt,
|
|
459
|
+
outcome,
|
|
460
|
+
messageId
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
async attempt(method, startedAt, write) {
|
|
464
|
+
return await attemptWrite(this.telemetry, this.routeId, method, startedAt, write);
|
|
465
|
+
}
|
|
416
466
|
async reply(response, opts) {
|
|
417
467
|
this.checkLegality("reply");
|
|
418
|
-
const
|
|
468
|
+
const startedAt = performance.now();
|
|
469
|
+
const created = await this.attempt("reply", startedAt, () => this.writeReply(response, opts));
|
|
419
470
|
this.transition("reply", "replied");
|
|
420
|
-
|
|
471
|
+
const message = this.remember(this.requireMessage(created, "reply"));
|
|
472
|
+
this.report("reply", startedAt, "sent", message.id);
|
|
473
|
+
return message;
|
|
421
474
|
}
|
|
422
475
|
async defer(opts) {
|
|
423
476
|
this.checkLegality("defer");
|
|
424
|
-
|
|
477
|
+
const startedAt = performance.now();
|
|
478
|
+
await this.attempt("defer", startedAt, () => this.writeDefer(opts));
|
|
425
479
|
this.transition("defer", "deferred-reply");
|
|
480
|
+
this.report("defer", startedAt, "sent", null);
|
|
426
481
|
}
|
|
427
482
|
async deferUpdate() {
|
|
428
483
|
this.checkLegality("deferUpdate");
|
|
429
|
-
|
|
484
|
+
const startedAt = performance.now();
|
|
485
|
+
await this.attempt("deferUpdate", startedAt, () => this.writeDeferUpdate());
|
|
430
486
|
this.transition("deferUpdate", "deferred-update");
|
|
487
|
+
this.report("deferUpdate", startedAt, "sent", null);
|
|
431
488
|
}
|
|
432
489
|
/**
|
|
433
490
|
* After a deferUpdate the state stays deferred-update, so the rewrite repeats. The returned message
|
|
@@ -436,31 +493,51 @@ var BaseReplySender = class {
|
|
|
436
493
|
*/
|
|
437
494
|
async update(response) {
|
|
438
495
|
this.checkLegality("update");
|
|
439
|
-
|
|
440
|
-
|
|
496
|
+
const startedAt = performance.now();
|
|
497
|
+
if (this.state === "deferred-update") {
|
|
498
|
+
const edited = await this.attempt("update", startedAt, () => this.editOriginal(response));
|
|
499
|
+
this.report("update", startedAt, "sent", edited.id);
|
|
500
|
+
return edited;
|
|
501
|
+
}
|
|
502
|
+
const created = await this.attempt("update", startedAt, () => this.writeUpdate(response));
|
|
441
503
|
this.transition("update", "replied");
|
|
442
|
-
|
|
504
|
+
const message = this.remember(this.requireMessage(created, "update"));
|
|
505
|
+
this.report("update", startedAt, "sent", message.id);
|
|
506
|
+
return message;
|
|
443
507
|
}
|
|
444
508
|
async followUp(response, opts) {
|
|
445
509
|
this.checkLegality("followUp");
|
|
446
|
-
const
|
|
447
|
-
|
|
510
|
+
const startedAt = performance.now();
|
|
511
|
+
const created = await this.attempt("followUp", startedAt, () => this.writeFollowUp(response, opts));
|
|
512
|
+
const message = this.remember(created);
|
|
513
|
+
this.report("followUp", startedAt, "sent", message.id);
|
|
514
|
+
return message;
|
|
448
515
|
}
|
|
449
516
|
async edit(targetOrResponse, maybeResponse) {
|
|
450
517
|
this.checkLegality("edit");
|
|
451
|
-
|
|
518
|
+
const startedAt = performance.now();
|
|
519
|
+
if (maybeResponse === void 0) {
|
|
520
|
+
const edited = await this.attempt("edit", startedAt, () => this.editOriginal(targetOrResponse));
|
|
521
|
+
this.report("edit", startedAt, "sent", edited.id);
|
|
522
|
+
return edited;
|
|
523
|
+
}
|
|
452
524
|
const target = targetOrResponse;
|
|
453
525
|
if (!this.sent.has(target.id)) throw new _seedcord_errors_internal.SeedcordError(_seedcord_errors.SeedcordErrorCode.ReplyForeignEditTarget, [
|
|
454
526
|
"edit",
|
|
455
527
|
target.id,
|
|
456
528
|
this.routeId
|
|
457
529
|
]);
|
|
458
|
-
|
|
530
|
+
const written = await this.attempt("edit", startedAt, () => this.writeEditTarget(target.id, maybeResponse));
|
|
531
|
+
const message = this.remember(written);
|
|
532
|
+
this.report("edit", startedAt, "sent", message.id);
|
|
533
|
+
return message;
|
|
459
534
|
}
|
|
460
535
|
async delete(target) {
|
|
461
536
|
this.checkLegality("delete");
|
|
537
|
+
const startedAt = performance.now();
|
|
462
538
|
if (target === void 0) {
|
|
463
|
-
await this.writeDeleteOriginal();
|
|
539
|
+
await this.attempt("delete", startedAt, () => this.writeDeleteOriginal());
|
|
540
|
+
this.report("delete", startedAt, "sent", null);
|
|
464
541
|
return;
|
|
465
542
|
}
|
|
466
543
|
if (!this.sent.has(target.id)) throw new _seedcord_errors_internal.SeedcordError(_seedcord_errors.SeedcordErrorCode.ReplyForeignEditTarget, [
|
|
@@ -468,8 +545,9 @@ var BaseReplySender = class {
|
|
|
468
545
|
target.id,
|
|
469
546
|
this.routeId
|
|
470
547
|
]);
|
|
471
|
-
await this.writeDeleteTarget(target.id);
|
|
548
|
+
await this.attempt("delete", startedAt, () => this.writeDeleteTarget(target.id));
|
|
472
549
|
this.sent.delete(target.id);
|
|
550
|
+
this.report("delete", startedAt, "sent", null);
|
|
473
551
|
}
|
|
474
552
|
/** Routes to the verb the current ack state permits. Every state has a route, so the illegal-ack throw is unreachable. */
|
|
475
553
|
async send(response, opts) {
|
|
@@ -489,8 +567,10 @@ var BaseReplySender = class {
|
|
|
489
567
|
const name = modal.constructor?.name;
|
|
490
568
|
throw translateSerializationError(error, !name || name === "Object" ? "modal" : name, 0, this.routeId);
|
|
491
569
|
}
|
|
492
|
-
|
|
570
|
+
const startedAt = performance.now();
|
|
571
|
+
await this.attempt("showModal", startedAt, () => this.writeModal(data));
|
|
493
572
|
this.transition("showModal", "replied");
|
|
573
|
+
this.report("showModal", startedAt, "sent", null);
|
|
494
574
|
}
|
|
495
575
|
serialize(response) {
|
|
496
576
|
return serializeReply(response, this.routeId);
|
|
@@ -518,54 +598,152 @@ var BaseReplySender = class {
|
|
|
518
598
|
guardModalSource() {}
|
|
519
599
|
};
|
|
520
600
|
|
|
601
|
+
//#endregion
|
|
602
|
+
//#region src/subscribers/FaultThrottle.ts
|
|
603
|
+
/**
|
|
604
|
+
* Drops duplicate fault reports inside a fixed window, so a recurring fault (a database outage on a
|
|
605
|
+
* hot path) reports once per window and never floods the webhook.
|
|
606
|
+
*
|
|
607
|
+
* @internal
|
|
608
|
+
*/
|
|
609
|
+
var FaultThrottle = class FaultThrottle {
|
|
610
|
+
windowMs;
|
|
611
|
+
now;
|
|
612
|
+
static perCore = /* @__PURE__ */ new WeakMap();
|
|
613
|
+
/**
|
|
614
|
+
* The throttle for one bot instance.
|
|
615
|
+
*
|
|
616
|
+
* @internal
|
|
617
|
+
*/
|
|
618
|
+
static for(core) {
|
|
619
|
+
let throttle = FaultThrottle.perCore.get(core);
|
|
620
|
+
if (!throttle) {
|
|
621
|
+
throttle = new FaultThrottle();
|
|
622
|
+
FaultThrottle.perCore.set(core, throttle);
|
|
623
|
+
}
|
|
624
|
+
return throttle;
|
|
625
|
+
}
|
|
626
|
+
lastReportedAt = /* @__PURE__ */ new Map();
|
|
627
|
+
constructor(windowMs = 6e4, now = () => Date.now()) {
|
|
628
|
+
this.windowMs = windowMs;
|
|
629
|
+
this.now = now;
|
|
630
|
+
}
|
|
631
|
+
/** Evicts the entry for this key if it has aged out. */
|
|
632
|
+
shouldReport(key) {
|
|
633
|
+
const last = this.lastReportedAt.get(key);
|
|
634
|
+
if (last === void 0) return true;
|
|
635
|
+
if (this.now() - last < this.windowMs) return false;
|
|
636
|
+
this.lastReportedAt.delete(key);
|
|
637
|
+
return true;
|
|
638
|
+
}
|
|
639
|
+
markReported(key) {
|
|
640
|
+
this.lastReportedAt.set(key, this.now());
|
|
641
|
+
}
|
|
642
|
+
clear() {
|
|
643
|
+
this.lastReportedAt.clear();
|
|
644
|
+
}
|
|
645
|
+
};
|
|
646
|
+
|
|
647
|
+
//#endregion
|
|
648
|
+
//#region src/dispatch/dispatchReport.ts
|
|
649
|
+
/**
|
|
650
|
+
* Classifies a caught stop for `interactionDispatched` so a gate and a
|
|
651
|
+
* handler label the same stop identically.
|
|
652
|
+
*
|
|
653
|
+
* @internal
|
|
654
|
+
*/
|
|
655
|
+
function outcomeFor(caught) {
|
|
656
|
+
if (caught instanceof require_Silence.Silence) return "refused";
|
|
657
|
+
if (caught instanceof require_Silence.Notice) return caught.report ? "failed" : "refused";
|
|
658
|
+
return "failed";
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* Discord's interaction creation to now, read from the snowflake. Called at dispatch entry, since
|
|
662
|
+
* a later read would count the handler run into the queue time as well.
|
|
663
|
+
*
|
|
664
|
+
* @internal
|
|
665
|
+
*/
|
|
666
|
+
function queuedMsFor(interactionId) {
|
|
667
|
+
try {
|
|
668
|
+
return Date.now() - (0, _seedcord_utils.timestampFromSnowflake)(interactionId);
|
|
669
|
+
} catch {
|
|
670
|
+
return 0;
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Builds the `interactionDispatched` payload both transports publish, so the two clocks are read the
|
|
675
|
+
* same way on each.
|
|
676
|
+
*
|
|
677
|
+
* @internal
|
|
678
|
+
*/
|
|
679
|
+
function dispatchedPayload(report) {
|
|
680
|
+
return {
|
|
681
|
+
routeId: report.routeId,
|
|
682
|
+
interactionId: report.interactionId,
|
|
683
|
+
kind: report.kind,
|
|
684
|
+
outcome: report.outcome,
|
|
685
|
+
fallback: report.fallback,
|
|
686
|
+
durationMs: performance.now() - report.startedAt,
|
|
687
|
+
queuedMs: report.queuedMs
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
|
|
521
691
|
//#endregion
|
|
522
692
|
exports.AckTrace = AckTrace;
|
|
523
693
|
exports.BaseReplySender = BaseReplySender;
|
|
524
|
-
exports.CommandMetadataKey =
|
|
525
|
-
exports.ComponentDefsKey =
|
|
526
|
-
exports.EventMetadataKey =
|
|
527
|
-
exports.
|
|
528
|
-
exports.
|
|
694
|
+
exports.CommandMetadataKey = require_publishDefault.CommandMetadataKey;
|
|
695
|
+
exports.ComponentDefsKey = require_Silence.ComponentDefsKey;
|
|
696
|
+
exports.EventMetadataKey = require_publishDefault.EventMetadataKey;
|
|
697
|
+
exports.FaultThrottle = FaultThrottle;
|
|
698
|
+
exports.GateNotice = require_Silence.GateNotice;
|
|
699
|
+
exports.GatedMetadataKey = require_publishDefault.GatedMetadataKey;
|
|
529
700
|
exports.HmrManager = HmrManager;
|
|
530
|
-
exports.InteractionMetadataKey =
|
|
531
|
-
exports.InteractionRouteKeys =
|
|
532
|
-
exports.InteractionRoutes =
|
|
533
|
-
exports.MiddlewareMetadataKey =
|
|
534
|
-
exports.MissingPermissions =
|
|
535
|
-
exports.MissingRole =
|
|
536
|
-
exports.NeedsAny =
|
|
537
|
-
exports.NotAllowed =
|
|
538
|
-
exports.NotInDm =
|
|
539
|
-
exports.NotInGuild =
|
|
540
|
-
exports.NotOwner =
|
|
541
|
-
exports.NoticeCard =
|
|
542
|
-
exports.OnCooldown =
|
|
701
|
+
exports.InteractionMetadataKey = require_publishDefault.InteractionMetadataKey;
|
|
702
|
+
exports.InteractionRouteKeys = require_publishDefault.InteractionRouteKeys;
|
|
703
|
+
exports.InteractionRoutes = require_publishDefault.InteractionRoutes;
|
|
704
|
+
exports.MiddlewareMetadataKey = require_publishDefault.MiddlewareMetadataKey;
|
|
705
|
+
exports.MissingPermissions = require_Silence.MissingPermissions;
|
|
706
|
+
exports.MissingRole = require_Silence.MissingRole;
|
|
707
|
+
exports.NeedsAny = require_Silence.NeedsAny;
|
|
708
|
+
exports.NotAllowed = require_Silence.NotAllowed;
|
|
709
|
+
exports.NotInDm = require_Silence.NotInDm;
|
|
710
|
+
exports.NotInGuild = require_Silence.NotInGuild;
|
|
711
|
+
exports.NotOwner = require_Silence.NotOwner;
|
|
712
|
+
exports.NoticeCard = require_Silence.NoticeCard;
|
|
713
|
+
exports.OnCooldown = require_Silence.OnCooldown;
|
|
543
714
|
exports.PAGE_MAX = PAGE_MAX;
|
|
544
|
-
exports.PermissionNames =
|
|
545
|
-
exports.
|
|
546
|
-
exports.
|
|
547
|
-
exports.
|
|
715
|
+
exports.PermissionNames = require_Silence.PermissionNames;
|
|
716
|
+
exports.PublishDefault = require_publishDefault.PublishDefault;
|
|
717
|
+
exports.SubscribeMetadataKey = require_publishDefault.SubscribeMetadataKey;
|
|
718
|
+
exports.WebhookUrlMetadataKey = require_publishDefault.WebhookUrlMetadataKey;
|
|
719
|
+
exports.areRoutes = require_Silence.areRoutes;
|
|
720
|
+
exports.asError = asError;
|
|
548
721
|
exports.checkAckLegality = checkAckLegality;
|
|
549
|
-
exports.contextMenuRouteOf =
|
|
550
|
-
exports.decodeComponentRoute =
|
|
551
|
-
exports.decodeFor =
|
|
552
|
-
exports.deferFlags = deferFlags;
|
|
553
|
-
exports.
|
|
722
|
+
exports.contextMenuRouteOf = require_Silence.contextMenuRouteOf;
|
|
723
|
+
exports.decodeComponentRoute = require_Silence.decodeComponentRoute;
|
|
724
|
+
exports.decodeFor = require_Silence.decodeFor;
|
|
725
|
+
exports.deferFlags = require_publishDefault.deferFlags;
|
|
726
|
+
exports.dispatchedPayload = dispatchedPayload;
|
|
727
|
+
exports.getDevChannel = require_devChannel.getDevChannel;
|
|
728
|
+
exports.interactionRoutesOf = require_Silence.interactionRoutesOf;
|
|
729
|
+
exports.outcomeFor = outcomeFor;
|
|
554
730
|
exports.pageCursor = pageCursor;
|
|
555
|
-
exports.pickNotice =
|
|
556
|
-
exports.prefixOf =
|
|
731
|
+
exports.pickNotice = require_Silence.pickNotice;
|
|
732
|
+
exports.prefixOf = require_Silence.prefixOf;
|
|
733
|
+
exports.queuedMsFor = queuedMsFor;
|
|
734
|
+
exports.reportedWrite = reportedWrite;
|
|
557
735
|
exports.routeIdOf = routeIdOf;
|
|
558
736
|
exports.runGates = runGates;
|
|
559
737
|
exports.runHandlerGates = runHandlerGates;
|
|
560
|
-
exports.selectMenuRouteOf =
|
|
561
|
-
exports.sendFlags = sendFlags;
|
|
738
|
+
exports.selectMenuRouteOf = require_Silence.selectMenuRouteOf;
|
|
739
|
+
exports.sendFlags = require_publishDefault.sendFlags;
|
|
562
740
|
exports.sendTarget = sendTarget;
|
|
563
741
|
exports.serializeReply = serializeReply;
|
|
564
|
-
exports.setBotColor =
|
|
565
|
-
exports.setDevChannel = setDevChannel;
|
|
742
|
+
exports.setBotColor = require_publishDefault.setBotColor;
|
|
743
|
+
exports.setDevChannel = require_devChannel.setDevChannel;
|
|
566
744
|
exports.slowGateMonitor = slowGateMonitor;
|
|
567
|
-
exports.storeComponentRoute =
|
|
568
|
-
exports.storeInteractionRoute =
|
|
745
|
+
exports.storeComponentRoute = require_Silence.storeComponentRoute;
|
|
746
|
+
exports.storeInteractionRoute = require_Silence.storeInteractionRoute;
|
|
569
747
|
exports.translateSerializationError = translateSerializationError;
|
|
570
748
|
exports.wrapHot = wrapHot;
|
|
571
749
|
//# sourceMappingURL=internal.index.cjs.map
|