diff --git a/Queue/Storage/Context.ts b/Queue/Storage/Context.ts index e86db68..d40d246 100644 --- a/Queue/Storage/Context.ts +++ b/Queue/Storage/Context.ts @@ -7,10 +7,7 @@ import { Types } from "../../Types" export class Context { readonly alarm = new storage.DurableObject.Alarm(this.state.storage) private nextAlarm: number | undefined - private readonly epochNow: number - private constructor(private readonly state: cloudflare.DurableObjectState, private readonly now: isoly.DateTime) { - this.epochNow = isoly.DateTime.epoch(this.now) - } + private constructor(private readonly state: cloudflare.DurableObjectState, private readonly now: isoly.DateTime) {} async trigger(events: Types.EventBase[]): Promise { await Promise.all(events.map(event => this.sendOrSnooze(event))) @@ -19,10 +16,10 @@ export class Context { private async sendOrSnooze(event: Types.EventBase): Promise { if (event.retries < event.options.maxRetries && !(await this.send(event))) { event.alarm = isoly.DateTime.epoch( - isoly.DateTime.nextSecond(this.now, event.options.timeFactor * event.retries), + isoly.DateTime.nextSecond(this.now, event.options.timeFactor * ++event.retries), "milliseconds" ) - await this.state.storage.put(`hook|${event.index}`, { ...event, retries: ++event.retries }) + await this.state.storage.put(`hook|${event.index}`, { ...event, retries: event.retries }) this.nextAlarm = this.nextAlarm && this.nextAlarm <= event.alarm ? this.nextAlarm : event.alarm } else await this.state.storage.delete(`hook|${event.index}`) @@ -31,10 +28,7 @@ export class Context { await this.trigger([...(await this.state.storage.list({ prefix: `hook|` })).values()]) } async send(event: Types.EventBase): Promise { - return ( - (!event.alarm || event.alarm <= this.epochNow) && - (await http.fetch(Types.EventBase.toRequest(event)).then(r => r.status >= 200 && r.status < 300)) - ) + return await http.fetch(Types.EventBase.toRequest(event)).then(r => r.status >= 200 && r.status < 300) } static open(state: cloudflare.DurableObjectState): Context { return new Context(state, isoly.DateTime.now()) diff --git a/package-lock.json b/package-lock.json index 828342a..5b61918 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,12 +66,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -265,18 +266,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -292,14 +293,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -392,10 +392,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dev": true, + "dependencies": { + "@babel/types": "^7.27.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -581,14 +584,14 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -625,14 +628,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4624,9 +4626,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -6091,15 +6093,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/test-worker/package-lock.json b/test-worker/package-lock.json index 9ac54e5..e703257 100644 --- a/test-worker/package-lock.json +++ b/test-worker/package-lock.json @@ -42,29 +42,29 @@ } }, "..": { - "version": "0.0.10", + "version": "0.0.13", "license": "MIT", "dependencies": { - "cloudly-http": "^0.1.6", + "cloudly-http": "^0.1.7", "cloudly-router": "^0.1.1", - "cloudly-storage": "0.10.3", - "gracely": "^2.0.7", - "isly": "^0.1.13", - "isoly": "^2.3.1" + "cloudly-storage": "^0.10.15", + "gracely": "^2.0.8", + "isly": "^0.1.20", + "isoly": "^2.3.11" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20231121.0", - "@types/jest": "^29.5.11", - "@typescript-eslint/eslint-plugin": "6.14.0", - "@typescript-eslint/parser": "6.14.0", - "eslint": "^8.55.0", + "@cloudflare/workers-types": "^4.20241112.0", + "@types/jest": "^29.5.14", + "@typescript-eslint/eslint-plugin": "7.15.0", + "@typescript-eslint/parser": "7.15.0", + "eslint": "^8.57.0", "eslint-plugin-prettierx": "github:utily/eslint-plugin-prettierx#utily-20231004", - "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-simple-import-sort": "^12.1.1", "jest": "^29.7.0", "prettierx": "github:utily/prettierx#utily-20231004", - "rimraf": "^5.0.5", - "ts-jest": "^29.1.1", - "typescript": "^5.3.3" + "rimraf": "^6.0.1", + "ts-jest": "^29.1.4", + "typescript": "^5.4.5" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/test-worker/wrangler.toml b/test-worker/wrangler.toml index 0e2c4d9..730d51c 100644 --- a/test-worker/wrangler.toml +++ b/test-worker/wrangler.toml @@ -1,19 +1,13 @@ compatibility_date = "2023-05-18" name = "worker-template" workers_dev = true +main = "./index.ts" routes = [] vars = {} [durable_objects] bindings = [{ name = "hookNamespace", class_name = "HookStorage" }] -[build] -command = "npm install && npm run build" - -[build.upload] -format = "modules" -main = "./_worker.js" - [env.production] workers_dev = false vars = {} @@ -29,10 +23,4 @@ r2_buckets = [] [dev] host = "example.com" - -port = 8787 - -[miniflare] -durable_objects_persist = "./.miniflare/durable-objects/" -kv_persist = "./.miniflare/kv/" port = 8787