+1
deno.json
+1
deno.json
+9
-11
util/session.ts
+9
-11
util/session.ts
···
38
38
? Number(Deno.env.get("DELAY_REFLECT_MINUTES_MAX")) * 60000
39
39
: 300000;
40
40
41
-
const delayReflectMultiplier = Deno.env.get("DELAY_REFLECT_MULTIPLIER_PERCENT")
42
-
? (Number(Deno.env.get("DELAY_REFLECT_MULTIPLIER_PERCENT")) / 100) + 1
43
-
: 1.05;
44
-
45
41
const sleepTimeEnabled =
46
42
Deno.env.get("SLEEP_START_TIME") && Deno.env.get("SLEEP_END_TIME")
47
43
? true
48
44
: false;
49
45
50
-
const sleepTimeEnd = Deno.env.get("SLEEP_END_TIME")
51
-
? Number(Deno.env.get("SLEEP_END_TIME"))
46
+
const timeZone: string = Deno.env.get("TIME_ZONE") ?? "America/Los_Angeles";
47
+
48
+
const wakeTime = Deno.env.get("WAKE_TIME")
49
+
? Number(Deno.env.get("WAKE_TIME"))
52
50
: 23;
53
-
const sleepTimeStart = Deno.env.get("SLEEP_START_TIME")
54
-
? Number(Deno.env.get("SLEEP_START_TIME"))
51
+
const sleepTime = Deno.env.get("SLEEP_TIME")
52
+
? Number(Deno.env.get("SLEEP_TIME"))
55
53
: 0;
56
54
57
55
export const session = {
···
86
84
minReflectDelayMinutes: delayReflectMin,
87
85
currentReflectDelayMinutes: delayReflectMin,
88
86
maxReflectDelayMinutes: delayReflectMax,
89
-
reflectDelayMultiplier: delayReflectMultiplier,
90
87
sleepTimeEnabled: sleepTimeEnabled,
91
-
sleepEnds: sleepTimeEnd,
92
-
sleepStarts: sleepTimeStart,
88
+
timeZone: timeZone,
89
+
wakeTime: wakeTime,
90
+
sleepTime: sleepTime,
93
91
};
94
92
95
93
export const claimTaskThread = () => {
+34
-26
util/time.ts
+34
-26
util/time.ts
···
1
+
import { session } from "./session.ts";
2
+
import { Temporal } from "@js-temporal/polyfill";
3
+
1
4
/**
2
5
* Generate a random time interval in milliseconds within a defined range
3
6
*
···
35
38
};
36
39
37
40
export const msUntilNextWakeWindow = (
38
-
sleepStarts: number,
39
-
sleepEnds: number,
41
+
sleepTime: number,
42
+
wakeTime: number,
40
43
minMinutesOffset: number,
41
44
maxMinutesOffset: number,
42
45
): number => {
43
-
const now = new Date();
44
-
const d = {
45
-
hour: now.getHours(),
46
-
day: now.getDate(),
47
-
month: now.getMonth(),
48
-
year: now.getFullYear(),
46
+
const current = Temporal.Now.zonedDateTimeISO(session.timeZone);
47
+
48
+
const dt = {
49
+
hour: current.hour,
50
+
day: current.day,
51
+
month: current.month,
52
+
year: current.year,
49
53
};
50
54
51
-
if (d.hour >= sleepEnds && d.hour < sleepStarts) {
55
+
if (dt.hour >= wakeTime && dt.hour < sleepTime) {
52
56
return 0;
53
57
} else {
54
-
let wakeTime;
58
+
let newTime;
55
59
56
-
if (d.hour < sleepEnds) {
57
-
wakeTime = new Date(d.year, d.month, d.day, sleepEnds);
60
+
if (dt.hour < wakeTime) {
61
+
newTime = current.with({ hour: wakeTime });
58
62
} else {
59
-
wakeTime = new Date(d.year, d.month, d.day + 1, sleepEnds);
63
+
newTime = current.with({ day: dt.day + 1, hour: wakeTime });
60
64
}
61
65
62
-
return wakeTime.getTime() +
63
-
msRandomOffset(minMinutesOffset, maxMinutesOffset) - now.getTime();
66
+
return newTime.toInstant().epochMilliseconds +
67
+
msRandomOffset(minMinutesOffset, maxMinutesOffset) -
68
+
current.toInstant().epochMilliseconds;
64
69
}
65
70
};
66
71
···
69
74
minMinutesOffset: number,
70
75
maxMinutesOffset: number,
71
76
) => {
72
-
const now = new Date();
73
-
const d = {
74
-
hour: now.getHours(),
75
-
day: now.getDate(),
76
-
month: now.getMonth(),
77
-
year: now.getFullYear(),
77
+
const current = Temporal.Now.zonedDateTimeISO(session.timeZone);
78
+
79
+
const dt = {
80
+
hour: current.hour,
81
+
day: current.day,
82
+
month: current.month,
83
+
year: current.year,
78
84
};
79
85
80
86
let msToWindow;
81
-
if (d.hour < window) {
82
-
msToWindow = new Date(d.year, d.month, d.day, window);
87
+
if (dt.hour < window) {
88
+
msToWindow = current.with({ hour: window }).toInstant().epochMilliseconds;
83
89
} else {
84
-
msToWindow = new Date(d.year, d.month, d.day + 1, window);
90
+
msToWindow = current.with({ day: dt.day + 1, hour: window }).toInstant()
91
+
.epochMilliseconds;
85
92
}
86
93
87
-
return msToWindow.getTime() +
88
-
msRandomOffset(minMinutesOffset, maxMinutesOffset) - now.getTime();
94
+
return msToWindow +
95
+
msRandomOffset(minMinutesOffset, maxMinutesOffset) -
96
+
current.toInstant().epochMilliseconds;
89
97
};