create-cloudflare) with wrangler locally (not sure why it thinks the address in use - it's not)
dev
wrangler dev
WorkerKV for some experiment and this is my codeexpiration props again?this.windowMs = 60_000 // 1 minuteelse clause. Try the followingexpiration (seconds since the epoch) or expirationTtl (seconds from now) ? Because I saw your this.windowMs = 60_000 // 1 minute comment, but you also have expirationTtl: this.windowMs and that would be wrong; it would be 60000 seconds.totalHits but the expiration time remains that same, thats why it is stored in resetTime. So when I am updating it, I am passing the expiration again.As of January 2022, expiration targets that are less than 60 seconds into the future are not supported. This is true for both expiration methods.
expiration attribute?async increment(key: string): Promise<ClientRateLimitInfo> {
const keyWithPrefix = this.prefixKey(key);
// @ts-ignore
let payload: Required<ClientRateLimitInfo> = await this.namespace.get<Required<ClientRateLimitInfo>>(
keyWithPrefix,
"json",
);
const wasCreated = payload != null
if (wasCreated) payload = {
totalHits: payload.totalHits + 1,
resetTime: new Date(payload.resetTime),
};
else
payload = {
totalHits: 1,
resetTime: new Date(Date.now() + this.windowMs),
};
console.log("Payload - ", payload, " Expire - ", payload.resetTime.toLocaleString(), " Current - ", new Date().toLocaleString())
await this.namespace.put(keyWithPrefix, JSON.stringify(payload), {
expiration: !wasCreated ? Math.floor(payload.resetTime.getTime() / 1000) : undefined,
// expirationTtl: this.windowMs
});
return payload;
}const payload = wasCreated
? {
totalHits: payload.totalHits + 1,
resetTime: new Date(payload.resetTime)
}
: {
totalHits: 1,
resetTime: new Date(Date.now() + this.windowMs),
}if (wasCreated) {
payload = {
totalHits: payload.totalHits + 1,
resetTime: new Date(payload.resetTime),
}; // <-- semicolon here
} else { // <-- not here
payload = {
totalHits: 1,
resetTime: new Date(Date.now() + this.windowMs),
};
} ⛅️ wrangler 3.62.0
-------------------
✨ Compiled Worker successfully
✘ [ERROR] Address already in use (127.0.0.1:8788). Please check that you are not already running a server on this address or specify a different port with --port.
[wrangler:inf] Ready on http://localhost:53635
⎔ Starting local server...
/Users/ccostes/dev/onecall-cloudflare/frontend/node_modules/wrangler/wrangler-dist/cli.js:29747
throw a;
^
MiniflareCoreError [ERR_RUNTIME_FAILURE]: The Workers runtime failed to start. There is likely additional logging output above.
at #assembleAndUpdateConfig (/Users/ccostes/dev/onecall-cloudflare/frontend/node_modules/miniflare/dist/src/index.js:9161:13)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Mutex.runWith (/Users/ccostes/dev/onecall-cloudflare/frontend/node_modules/miniflare/dist/src/index.js:3521:16) {
code: 'ERR_RUNTIME_FAILURE',
cause: undefined
}
Node.js v21.5.0await this.namespace.put(keyWithPrefix, JSON.stringify(payload), {
expiration: Math.floor(payload.resetTime.getTime() / 1000),
});