@depup/miniflare 4.20260317.0-depup.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/README.md +31 -0
- package/bootstrap.js +11 -0
- package/changes.json +10 -0
- package/dist/local-explorer-ui/assets/Breadcrumbs-7hjI0sYt.js +1 -0
- package/dist/local-explorer-ui/assets/TableSelect-_bi6l6Iv.js +25 -0
- package/dist/local-explorer-ui/assets/_className-gSkjniQn.js +1 -0
- package/dist/local-explorer-ui/assets/_databaseId-DWcfgBis.js +1 -0
- package/dist/local-explorer-ui/assets/_namespaceId-8ViM8VDL.js +1 -0
- package/dist/local-explorer-ui/assets/_objectId-X6x-JUph.js +1 -0
- package/dist/local-explorer-ui/assets/dropdown-DFeFcKfn-BCd_NRZS.js +1 -0
- package/dist/local-explorer-ui/assets/index-BFNDwiew.js +42 -0
- package/dist/local-explorer-ui/assets/index-CLSFsgi0.js +1 -0
- package/dist/local-explorer-ui/assets/index-KG4JeHCX.js +1 -0
- package/dist/local-explorer-ui/assets/index-mgoUmSld.css +1 -0
- package/dist/local-explorer-ui/assets/table-BUmvaBj8-v-EIZgOz.js +1 -0
- package/dist/local-explorer-ui/favicon.svg +3 -0
- package/dist/local-explorer-ui/index.html +14 -0
- package/dist/src/index.d.ts +8703 -0
- package/dist/src/index.js +83666 -0
- package/dist/src/index.js.map +6 -0
- package/dist/src/shared/dev-registry.worker.js +69801 -0
- package/dist/src/shared/dev-registry.worker.js.map +6 -0
- package/dist/src/workers/analytics-engine/analytics-engine.worker.js +15 -0
- package/dist/src/workers/analytics-engine/analytics-engine.worker.js.map +6 -0
- package/dist/src/workers/assets/assets-kv.worker.js +28 -0
- package/dist/src/workers/assets/assets-kv.worker.js.map +6 -0
- package/dist/src/workers/assets/assets.worker.js +9014 -0
- package/dist/src/workers/assets/assets.worker.js.map +6 -0
- package/dist/src/workers/assets/router.worker.js +9625 -0
- package/dist/src/workers/assets/router.worker.js.map +6 -0
- package/dist/src/workers/assets/rpc-proxy.worker.js +29 -0
- package/dist/src/workers/assets/rpc-proxy.worker.js.map +6 -0
- package/dist/src/workers/browser-rendering/binding.worker.js +129 -0
- package/dist/src/workers/browser-rendering/binding.worker.js.map +6 -0
- package/dist/src/workers/cache/cache-entry-noop.worker.js +19 -0
- package/dist/src/workers/cache/cache-entry-noop.worker.js.map +6 -0
- package/dist/src/workers/cache/cache-entry.worker.js +28 -0
- package/dist/src/workers/cache/cache-entry.worker.js.map +6 -0
- package/dist/src/workers/cache/cache.worker.js +653 -0
- package/dist/src/workers/cache/cache.worker.js.map +6 -0
- package/dist/src/workers/core/do-wrapper.worker.js +43 -0
- package/dist/src/workers/core/do-wrapper.worker.js.map +6 -0
- package/dist/src/workers/core/entry.worker.js +4633 -0
- package/dist/src/workers/core/entry.worker.js.map +6 -0
- package/dist/src/workers/core/strip-cf-connecting-ip.worker.js +11 -0
- package/dist/src/workers/core/strip-cf-connecting-ip.worker.js.map +6 -0
- package/dist/src/workers/d1/database.worker.js +219 -0
- package/dist/src/workers/d1/database.worker.js.map +6 -0
- package/dist/src/workers/dispatch-namespace/dispatch-namespace-proxy.worker.js +2271 -0
- package/dist/src/workers/dispatch-namespace/dispatch-namespace-proxy.worker.js.map +6 -0
- package/dist/src/workers/dispatch-namespace/dispatch-namespace.worker.js +12 -0
- package/dist/src/workers/dispatch-namespace/dispatch-namespace.worker.js.map +6 -0
- package/dist/src/workers/email/email.worker.js +23 -0
- package/dist/src/workers/email/email.worker.js.map +6 -0
- package/dist/src/workers/email/send_email.worker.js +3294 -0
- package/dist/src/workers/email/send_email.worker.js.map +6 -0
- package/dist/src/workers/hello-world/binding.worker.js +19 -0
- package/dist/src/workers/hello-world/binding.worker.js.map +6 -0
- package/dist/src/workers/hello-world/object.worker.js +14 -0
- package/dist/src/workers/hello-world/object.worker.js.map +6 -0
- package/dist/src/workers/images/images.worker.js +155 -0
- package/dist/src/workers/images/images.worker.js.map +6 -0
- package/dist/src/workers/kv/namespace.worker.js +322 -0
- package/dist/src/workers/kv/namespace.worker.js.map +6 -0
- package/dist/src/workers/kv/sites.worker.js +146 -0
- package/dist/src/workers/kv/sites.worker.js.map +6 -0
- package/dist/src/workers/local-explorer/explorer.worker.js +5245 -0
- package/dist/src/workers/local-explorer/explorer.worker.js.map +6 -0
- package/dist/src/workers/pipelines/pipeline.worker.js +10 -0
- package/dist/src/workers/pipelines/pipeline.worker.js.map +6 -0
- package/dist/src/workers/queues/broker.worker.js +289 -0
- package/dist/src/workers/queues/broker.worker.js.map +6 -0
- package/dist/src/workers/r2/bucket.worker.js +1134 -0
- package/dist/src/workers/r2/bucket.worker.js.map +6 -0
- package/dist/src/workers/ratelimit/ratelimit.worker.js +54 -0
- package/dist/src/workers/ratelimit/ratelimit.worker.js.map +6 -0
- package/dist/src/workers/secrets-store/secret.worker.js +65 -0
- package/dist/src/workers/secrets-store/secret.worker.js.map +6 -0
- package/dist/src/workers/shared/index.worker.js +693 -0
- package/dist/src/workers/shared/index.worker.js.map +6 -0
- package/dist/src/workers/shared/object-entry.worker.js +21 -0
- package/dist/src/workers/shared/object-entry.worker.js.map +6 -0
- package/dist/src/workers/shared/remote-proxy-client.worker.js +2271 -0
- package/dist/src/workers/shared/remote-proxy-client.worker.js.map +6 -0
- package/dist/src/workers/shared/zod.worker.js +2954 -0
- package/dist/src/workers/shared/zod.worker.js.map +6 -0
- package/dist/src/workers/workflows/binding.worker.js +2422 -0
- package/dist/src/workers/workflows/binding.worker.js.map +6 -0
- package/dist/src/workers/workflows/wrapped-binding.worker.js +71 -0
- package/dist/src/workers/workflows/wrapped-binding.worker.js.map +6 -0
- package/package.json +139 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
5
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
6
|
+
return kind && result && __defProp(target, key, result), result;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
// src/workers/queues/broker.worker.ts
|
|
10
|
+
import assert from "node:assert";
|
|
11
|
+
import { Buffer as Buffer2 } from "node:buffer";
|
|
12
|
+
|
|
13
|
+
// ../../node_modules/.pnpm/kleur@4.1.5/node_modules/kleur/colors.mjs
|
|
14
|
+
var FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY = !0;
|
|
15
|
+
typeof process < "u" && ({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {}, isTTY = process.stdout && process.stdout.isTTY);
|
|
16
|
+
var $ = {
|
|
17
|
+
enabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== "dumb" && (FORCE_COLOR != null && FORCE_COLOR !== "0" || isTTY)
|
|
18
|
+
};
|
|
19
|
+
function init(x, y) {
|
|
20
|
+
let rgx = new RegExp(`\\x1b\\[${y}m`, "g"), open = `\x1B[${x}m`, close = `\x1B[${y}m`;
|
|
21
|
+
return function(txt) {
|
|
22
|
+
return !$.enabled || txt == null ? txt : open + (~("" + txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
var reset = init(0, 0), bold = init(1, 22), dim = init(2, 22), italic = init(3, 23), underline = init(4, 24), inverse = init(7, 27), hidden = init(8, 28), strikethrough = init(9, 29), black = init(30, 39), red = init(31, 39), green = init(32, 39), yellow = init(33, 39), blue = init(34, 39), magenta = init(35, 39), cyan = init(36, 39), white = init(37, 39), gray = init(90, 39), grey = init(90, 39), bgBlack = init(40, 49), bgRed = init(41, 49), bgGreen = init(42, 49), bgYellow = init(43, 49), bgBlue = init(44, 49), bgMagenta = init(45, 49), bgCyan = init(46, 49), bgWhite = init(47, 49);
|
|
26
|
+
|
|
27
|
+
// src/workers/queues/broker.worker.ts
|
|
28
|
+
import {
|
|
29
|
+
HttpError,
|
|
30
|
+
LogLevel,
|
|
31
|
+
MiniflareDurableObject,
|
|
32
|
+
POST,
|
|
33
|
+
SharedBindings,
|
|
34
|
+
viewToBuffer
|
|
35
|
+
} from "miniflare:shared";
|
|
36
|
+
|
|
37
|
+
// src/workers/queues/constants.ts
|
|
38
|
+
var QueueBindings = {
|
|
39
|
+
SERVICE_WORKER_PREFIX: "MINIFLARE_WORKER_",
|
|
40
|
+
MAYBE_JSON_QUEUE_PRODUCERS: "MINIFLARE_QUEUE_PRODUCERS",
|
|
41
|
+
MAYBE_JSON_QUEUE_CONSUMERS: "MINIFLARE_QUEUE_CONSUMERS"
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// src/workers/queues/schemas.ts
|
|
45
|
+
import { Base64DataSchema, z } from "miniflare:zod";
|
|
46
|
+
var QueueMessageDelaySchema = z.number().int().min(0).max(86400).optional(), QueueProducerOptionsSchema = /* @__PURE__ */ z.object({
|
|
47
|
+
// https://developers.cloudflare.com/queues/platform/configuration/#producer
|
|
48
|
+
queueName: z.string(),
|
|
49
|
+
deliveryDelay: QueueMessageDelaySchema
|
|
50
|
+
}), QueueProducerSchema = /* @__PURE__ */ z.intersection(
|
|
51
|
+
QueueProducerOptionsSchema,
|
|
52
|
+
z.object({ workerName: z.string() })
|
|
53
|
+
), QueueProducersSchema = /* @__PURE__ */ z.record(QueueProducerSchema), QueueConsumerOptionsSchema = /* @__PURE__ */ z.object({
|
|
54
|
+
// https://developers.cloudflare.com/queues/platform/configuration/#consumer
|
|
55
|
+
// https://developers.cloudflare.com/queues/platform/limits/
|
|
56
|
+
maxBatchSize: z.number().min(0).max(100).optional(),
|
|
57
|
+
maxBatchTimeout: z.number().min(0).max(60).optional(),
|
|
58
|
+
// seconds
|
|
59
|
+
maxRetires: z.number().min(0).max(100).optional(),
|
|
60
|
+
// deprecated
|
|
61
|
+
maxRetries: z.number().min(0).max(100).optional(),
|
|
62
|
+
deadLetterQueue: z.ostring(),
|
|
63
|
+
retryDelay: QueueMessageDelaySchema
|
|
64
|
+
}).transform((queue) => (queue.maxRetires !== void 0 && (queue.maxRetries = queue.maxRetires), queue)), QueueConsumerSchema = /* @__PURE__ */ z.intersection(
|
|
65
|
+
QueueConsumerOptionsSchema,
|
|
66
|
+
z.object({ workerName: z.string() })
|
|
67
|
+
), QueueConsumersSchema = /* @__PURE__ */ z.record(QueueConsumerSchema), QueueContentTypeSchema = /* @__PURE__ */ z.enum(["text", "json", "bytes", "v8"]).default("v8"), QueueIncomingMessageSchema = /* @__PURE__ */ z.object({
|
|
68
|
+
contentType: QueueContentTypeSchema,
|
|
69
|
+
delaySecs: QueueMessageDelaySchema,
|
|
70
|
+
body: Base64DataSchema,
|
|
71
|
+
// When enqueuing messages on dead-letter queues, we want to reuse the same ID
|
|
72
|
+
// and timestamp
|
|
73
|
+
id: z.ostring(),
|
|
74
|
+
timestamp: z.onumber()
|
|
75
|
+
}), QueuesBatchRequestSchema = /* @__PURE__ */ z.object({
|
|
76
|
+
messages: z.array(QueueIncomingMessageSchema)
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// src/workers/queues/broker.worker.ts
|
|
80
|
+
var MAX_MESSAGE_SIZE_BYTES = 128 * 1e3, MAX_MESSAGE_BATCH_COUNT = 100, MAX_MESSAGE_BATCH_SIZE = 288 * 1e3, DEFAULT_BATCH_SIZE = 5, DEFAULT_BATCH_TIMEOUT = 1, DEFAULT_RETRIES = 2, exceptionQueueResponse = {
|
|
81
|
+
outcome: "exception",
|
|
82
|
+
retryBatch: { retry: !1 },
|
|
83
|
+
ackAll: !1,
|
|
84
|
+
retryMessages: [],
|
|
85
|
+
explicitAcks: []
|
|
86
|
+
}, PayloadTooLargeError = class extends HttpError {
|
|
87
|
+
constructor(message) {
|
|
88
|
+
super(413, message);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
function validateMessageSize(headers) {
|
|
92
|
+
let size = headers.get("Content-Length");
|
|
93
|
+
if (size !== null && parseInt(size) > MAX_MESSAGE_SIZE_BYTES)
|
|
94
|
+
throw new PayloadTooLargeError(
|
|
95
|
+
`message length of ${size} bytes exceeds limit of ${MAX_MESSAGE_SIZE_BYTES}`
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
function validateContentType(headers) {
|
|
99
|
+
let format = headers.get("X-Msg-Fmt") ?? void 0, result = QueueContentTypeSchema.safeParse(format);
|
|
100
|
+
if (!result.success)
|
|
101
|
+
throw new HttpError(
|
|
102
|
+
400,
|
|
103
|
+
`message content type ${format} is invalid; if specified, must be one of 'text', 'json', 'bytes', or 'v8'`
|
|
104
|
+
);
|
|
105
|
+
return result.data;
|
|
106
|
+
}
|
|
107
|
+
function validateMessageDelay(headers) {
|
|
108
|
+
let format = headers.get("X-Msg-Delay-Secs");
|
|
109
|
+
if (!format) return;
|
|
110
|
+
let result = QueueMessageDelaySchema.safeParse(Number(format));
|
|
111
|
+
if (!result.success)
|
|
112
|
+
throw new HttpError(
|
|
113
|
+
400,
|
|
114
|
+
`message delay ${format} is invalid: ${result.error}`
|
|
115
|
+
);
|
|
116
|
+
return result.data;
|
|
117
|
+
}
|
|
118
|
+
function validateBatchSize(headers) {
|
|
119
|
+
let count = headers.get("CF-Queue-Batch-Count");
|
|
120
|
+
if (count !== null && parseInt(count) > MAX_MESSAGE_BATCH_COUNT)
|
|
121
|
+
throw new PayloadTooLargeError(
|
|
122
|
+
`batch message count of ${count} exceeds limit of ${MAX_MESSAGE_BATCH_COUNT}`
|
|
123
|
+
);
|
|
124
|
+
let largestSize = headers.get("CF-Queue-Largest-Msg");
|
|
125
|
+
if (largestSize !== null && parseInt(largestSize) > MAX_MESSAGE_SIZE_BYTES)
|
|
126
|
+
throw new PayloadTooLargeError(
|
|
127
|
+
`message in batch has length ${largestSize} bytes which exceeds single message size limit of ${MAX_MESSAGE_SIZE_BYTES}`
|
|
128
|
+
);
|
|
129
|
+
let batchSize = headers.get("CF-Queue-Batch-Bytes");
|
|
130
|
+
if (batchSize !== null && parseInt(batchSize) > MAX_MESSAGE_BATCH_SIZE)
|
|
131
|
+
throw new PayloadTooLargeError(
|
|
132
|
+
`batch size of ${batchSize} bytes exceeds limit of 256000`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
function deserialise({ contentType, body }) {
|
|
136
|
+
return contentType === "text" ? { contentType, body: body.toString() } : contentType === "json" ? { contentType, body: JSON.parse(body.toString()) } : contentType === "bytes" ? { contentType, body: viewToBuffer(body) } : { contentType, body };
|
|
137
|
+
}
|
|
138
|
+
function serialise(msg) {
|
|
139
|
+
let body;
|
|
140
|
+
return msg.body.contentType === "text" ? body = Buffer2.from(msg.body.body) : msg.body.contentType === "json" ? body = Buffer2.from(JSON.stringify(msg.body.body)) : msg.body.contentType === "bytes" ? body = Buffer2.from(msg.body.body) : body = msg.body.body, {
|
|
141
|
+
id: msg.id,
|
|
142
|
+
timestamp: msg.timestamp.getTime(),
|
|
143
|
+
contentType: msg.body.contentType,
|
|
144
|
+
body: body.toString("base64")
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
var QueueMessage = class {
|
|
148
|
+
constructor(id, timestamp, body) {
|
|
149
|
+
this.id = id;
|
|
150
|
+
this.timestamp = timestamp;
|
|
151
|
+
this.body = body;
|
|
152
|
+
}
|
|
153
|
+
#failedAttempts = 0;
|
|
154
|
+
incrementFailedAttempts() {
|
|
155
|
+
return ++this.#failedAttempts;
|
|
156
|
+
}
|
|
157
|
+
get failedAttempts() {
|
|
158
|
+
return this.#failedAttempts;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
function formatQueueResponse(queueName, acked, total, time) {
|
|
162
|
+
let colour;
|
|
163
|
+
acked === total ? colour = green : acked > 0 ? colour = yellow : colour = red;
|
|
164
|
+
let message = `${bold("QUEUE")} ${queueName} ${colour(`${acked}/${total}`)}`;
|
|
165
|
+
return time !== void 0 && (message += grey(` (${time}ms)`)), reset(message);
|
|
166
|
+
}
|
|
167
|
+
var QueueBrokerObject = class extends MiniflareDurableObject {
|
|
168
|
+
#producers;
|
|
169
|
+
#consumers;
|
|
170
|
+
#messages = [];
|
|
171
|
+
#pendingFlush;
|
|
172
|
+
constructor(state, env) {
|
|
173
|
+
super(state, env);
|
|
174
|
+
let maybeProducers = env[QueueBindings.MAYBE_JSON_QUEUE_PRODUCERS];
|
|
175
|
+
maybeProducers === void 0 ? this.#producers = {} : this.#producers = QueueProducersSchema.parse(maybeProducers);
|
|
176
|
+
let maybeConsumers = env[QueueBindings.MAYBE_JSON_QUEUE_CONSUMERS];
|
|
177
|
+
maybeConsumers === void 0 ? this.#consumers = {} : this.#consumers = QueueConsumersSchema.parse(maybeConsumers);
|
|
178
|
+
}
|
|
179
|
+
get #maybeProducer() {
|
|
180
|
+
return Object.values(this.#producers).find(
|
|
181
|
+
(p) => p?.queueName === this.name
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
get #maybeConsumer() {
|
|
185
|
+
return this.#consumers[this.name];
|
|
186
|
+
}
|
|
187
|
+
#dispatchBatch(workerName, batch) {
|
|
188
|
+
let bindingName = `${QueueBindings.SERVICE_WORKER_PREFIX}${workerName}`, maybeService = this.env[bindingName];
|
|
189
|
+
assert(
|
|
190
|
+
maybeService !== void 0,
|
|
191
|
+
`Expected ${bindingName} service binding`
|
|
192
|
+
);
|
|
193
|
+
let messages = batch.map(({ id, timestamp, body, failedAttempts }) => {
|
|
194
|
+
let attempts = failedAttempts + 1;
|
|
195
|
+
return body.contentType === "v8" ? { id, timestamp, serializedBody: body.body, attempts } : { id, timestamp, body: body.body, attempts };
|
|
196
|
+
});
|
|
197
|
+
return maybeService.queue(this.name, messages);
|
|
198
|
+
}
|
|
199
|
+
#flush = async () => {
|
|
200
|
+
let consumer = this.#maybeConsumer;
|
|
201
|
+
assert(consumer !== void 0);
|
|
202
|
+
let batchSize = consumer.maxBatchSize ?? DEFAULT_BATCH_SIZE, maxAttempts = (consumer.maxRetries ?? DEFAULT_RETRIES) + 1, maxAttemptsS = maxAttempts === 1 ? "" : "s", batch = this.#messages.splice(0, batchSize), startTime = Date.now(), endTime, response;
|
|
203
|
+
try {
|
|
204
|
+
response = await this.#dispatchBatch(consumer.workerName, batch), endTime = Date.now();
|
|
205
|
+
} catch (e) {
|
|
206
|
+
endTime = Date.now(), await this.logWithLevel(LogLevel.ERROR, String(e)), response = exceptionQueueResponse;
|
|
207
|
+
}
|
|
208
|
+
let retryAll = response.retryBatch.retry || response.outcome !== "ok", retryMessages = new Map(
|
|
209
|
+
response.retryMessages?.map((r) => [r.msgId, r.delaySeconds])
|
|
210
|
+
), globalDelay = response.retryBatch.delaySeconds ?? consumer.retryDelay ?? 0, failedMessages = 0, toDeadLetterQueue = [];
|
|
211
|
+
for (let message of batch)
|
|
212
|
+
if (retryAll || retryMessages.has(message.id))
|
|
213
|
+
if (failedMessages++, message.incrementFailedAttempts() < maxAttempts) {
|
|
214
|
+
await this.logWithLevel(
|
|
215
|
+
LogLevel.DEBUG,
|
|
216
|
+
`Retrying message "${message.id}" on queue "${this.name}"...`
|
|
217
|
+
);
|
|
218
|
+
let fn = () => {
|
|
219
|
+
this.#messages.push(message), this.#ensurePendingFlush();
|
|
220
|
+
}, delay = retryMessages.get(message.id) ?? globalDelay;
|
|
221
|
+
this.timers.setTimeout(fn, delay * 1e3);
|
|
222
|
+
} else consumer.deadLetterQueue !== void 0 ? (await this.logWithLevel(
|
|
223
|
+
LogLevel.WARN,
|
|
224
|
+
`Moving message "${message.id}" on queue "${this.name}" to dead letter queue "${consumer.deadLetterQueue}" after ${maxAttempts} failed attempt${maxAttemptsS}...`
|
|
225
|
+
), toDeadLetterQueue.push(message)) : await this.logWithLevel(
|
|
226
|
+
LogLevel.WARN,
|
|
227
|
+
`Dropped message "${message.id}" on queue "${this.name}" after ${maxAttempts} failed attempt${maxAttemptsS}!`
|
|
228
|
+
);
|
|
229
|
+
let acked = batch.length - failedMessages;
|
|
230
|
+
if (await this.logWithLevel(
|
|
231
|
+
LogLevel.INFO,
|
|
232
|
+
formatQueueResponse(this.name, acked, batch.length, endTime - startTime)
|
|
233
|
+
), this.#pendingFlush = void 0, this.#messages.length > 0 && this.#ensurePendingFlush(), toDeadLetterQueue.length > 0) {
|
|
234
|
+
let name = consumer.deadLetterQueue;
|
|
235
|
+
assert(name !== void 0);
|
|
236
|
+
let ns = this.env[SharedBindings.DURABLE_OBJECT_NAMESPACE_OBJECT], id = ns.idFromName(name), stub = ns.get(id), cf = { miniflare: { name } }, batchRequest = {
|
|
237
|
+
messages: toDeadLetterQueue.map(serialise)
|
|
238
|
+
}, res = await stub.fetch("http://placeholder/batch", {
|
|
239
|
+
method: "POST",
|
|
240
|
+
body: JSON.stringify(batchRequest),
|
|
241
|
+
cf
|
|
242
|
+
});
|
|
243
|
+
assert(res.ok);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
#ensurePendingFlush() {
|
|
247
|
+
let consumer = this.#maybeConsumer;
|
|
248
|
+
assert(consumer !== void 0);
|
|
249
|
+
let batchSize = consumer.maxBatchSize ?? DEFAULT_BATCH_SIZE, batchTimeout = consumer.maxBatchTimeout ?? DEFAULT_BATCH_TIMEOUT, batchHasSpace = this.#messages.length < batchSize;
|
|
250
|
+
if (this.#pendingFlush !== void 0) {
|
|
251
|
+
if (this.#pendingFlush.immediate || batchHasSpace) return;
|
|
252
|
+
this.timers.clearTimeout(this.#pendingFlush.timeout), this.#pendingFlush = void 0;
|
|
253
|
+
}
|
|
254
|
+
let delay = batchHasSpace ? batchTimeout * 1e3 : 0, timeout = this.timers.setTimeout(this.#flush, delay);
|
|
255
|
+
this.#pendingFlush = { immediate: delay === 0, timeout };
|
|
256
|
+
}
|
|
257
|
+
#enqueue(messages, globalDelay = 0) {
|
|
258
|
+
for (let message of messages) {
|
|
259
|
+
let randomness = crypto.getRandomValues(new Uint8Array(16)), id = message.id ?? Buffer2.from(randomness).toString("hex"), timestamp = new Date(message.timestamp ?? this.timers.now()), body = deserialise(message), msg = new QueueMessage(id, timestamp, body), fn = () => {
|
|
260
|
+
this.#messages.push(msg), this.#ensurePendingFlush();
|
|
261
|
+
}, delay = message.delaySecs ?? globalDelay;
|
|
262
|
+
this.timers.setTimeout(fn, delay * 1e3);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
message = async (req) => {
|
|
266
|
+
if (this.#maybeConsumer === void 0) return new Response();
|
|
267
|
+
validateMessageSize(req.headers);
|
|
268
|
+
let contentType = validateContentType(req.headers), delay = validateMessageDelay(req.headers) ?? this.#maybeProducer?.deliveryDelay, body = Buffer2.from(await req.arrayBuffer());
|
|
269
|
+
return this.#enqueue(
|
|
270
|
+
[{ contentType, delaySecs: delay, body }],
|
|
271
|
+
this.#maybeProducer?.deliveryDelay
|
|
272
|
+
), new Response();
|
|
273
|
+
};
|
|
274
|
+
batch = async (req) => {
|
|
275
|
+
if (this.#maybeConsumer === void 0) return new Response();
|
|
276
|
+
validateBatchSize(req.headers);
|
|
277
|
+
let delay = validateMessageDelay(req.headers) ?? this.#maybeProducer?.deliveryDelay, body = QueuesBatchRequestSchema.parse(await req.json());
|
|
278
|
+
return this.#enqueue(body.messages, delay), new Response();
|
|
279
|
+
};
|
|
280
|
+
};
|
|
281
|
+
__decorateClass([
|
|
282
|
+
POST("/message")
|
|
283
|
+
], QueueBrokerObject.prototype, "message", 2), __decorateClass([
|
|
284
|
+
POST("/batch")
|
|
285
|
+
], QueueBrokerObject.prototype, "batch", 2);
|
|
286
|
+
export {
|
|
287
|
+
QueueBrokerObject
|
|
288
|
+
};
|
|
289
|
+
//# sourceMappingURL=broker.worker.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/workers/queues/broker.worker.ts", "../../../../../../node_modules/.pnpm/kleur@4.1.5/node_modules/kleur/colors.mjs", "../../../../src/workers/queues/constants.ts", "../../../../src/workers/queues/schemas.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["Buffer", "Buffer"]
|
|
6
|
+
}
|