Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1f4e34e
Implement fetching of EO IP ranges
tianq02 Jan 9, 2026
5c41d7e
add dummy EdgeOne IP Range Handler
tianq02 Jan 9, 2026
6850ff1
Add new logger for IP Ranges EO
tianq02 Jan 9, 2026
28c208b
Update README with NPM environment variables
tianq02 Jan 9, 2026
756c71f
formatting
tianq02 Jan 9, 2026
d2f9183
add env EO_AUTO_CONFIRM_ENABLED
tianq02 Jan 9, 2026
a2cefca
Implement every thing
tianq02 Jan 9, 2026
dc4d2fc
Refactor ip_ranges_eo.js
tianq02 Jan 9, 2026
754909d
Update real_ip_header for better EdgeOne support
tianq02 Jan 9, 2026
ea53ab3
Fix EO range fetch never run
tianq02 Jan 9, 2026
d4f1c6c
Fix env extract logic
tianq02 Jan 9, 2026
6cb3e14
Improve logging for EO API calls and zone processing
tianq02 Jan 9, 2026
35fb05d
Fix logic bug for Auto update confirm
tianq02 Jan 9, 2026
cdb2944
Rename IP Ranges EO logger to EO Ranges
tianq02 Jan 9, 2026
eed8c70
Update comments in ip_ranges_eo.conf
tianq02 Jan 10, 2026
6e6d4e5
Update advanced-config documentation for EdgeOne IP fetch
tianq02 Jan 10, 2026
e917aa6
Clean up main README, ready to merge
tianq02 Jan 10, 2026
46b88b1
Fix linting errors in backend/internal/ip_ranges_eo.js
tianq02 Jan 10, 2026
f5dfc76
Fix a logic bug initializing IP ranges fetch timer
tianq02 Jan 11, 2026
5086c59
Revise CDN IP Ranges management documentation
tianq02 Jan 11, 2026
09c5748
trigger ci
tianq02 Jan 11, 2026
1d6a421
trigger ci again
tianq02 Jan 11, 2026
e4ebb85
Fix env handling logic, remove excess code
tianq02 Jan 12, 2026
0b0b36a
once again trigger CI
tianq02 Jan 12, 2026
9ef0508
Merge branch 'NginxProxyManager:develop' into develop
tianq02 Jan 16, 2026
4bbceb8
Merge branch 'NginxProxyManager:develop' into develop
tianq02 Jan 22, 2026
56639f5
Merge branch 'develop' into develop
tianq02 Mar 17, 2026
a2db896
Merge branch 'NginxProxyManager:develop' into develop
tianq02 Apr 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 74 additions & 29 deletions backend/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,47 +3,92 @@
import app from "./app.js";
import internalCertificate from "./internal/certificate.js";
import internalIpRanges from "./internal/ip_ranges.js";
import internalIpRangesEO from "./internal/ip_ranges_eo.js";
import { global as logger } from "./logger.js";
import { migrateUp } from "./migrate.js";
import { getCompiledSchema } from "./schema/index.js";
import setup from "./setup.js";

const IP_RANGES_FETCH_ENABLED = process.env.IP_RANGES_FETCH_ENABLED !== "false";
const EO_IP_RANGES_FETCH_ENABLED = process.env.EO_IP_RANGES_FETCH_ENABLED === "true";

// Timer env:
// 'true' = always, 'false' = never,
// anything else (including unset/'auto') = enable on successful fetch
const IP_RANGES_TIMER_ENABLED = process.env.IP_RANGES_TIMER_ENABLED;
const EO_IP_RANGES_TIMER_ENABLED = process.env.EO_IP_RANGES_TIMER_ENABLED;

async function appStart() {
return migrateUp()
.then(setup)
.then(getCompiledSchema)
.then(() => {
if (!IP_RANGES_FETCH_ENABLED) {
logger.info("IP Ranges fetch is disabled by environment variable");
return;
try {
await migrateUp();
await setup();
await getCompiledSchema();

// IP Ranges - Cloudflare and Cloudfront
if (IP_RANGES_FETCH_ENABLED) {
let ipRangesFetchSucceeded = false;
try {
await internalIpRanges.fetch();
ipRangesFetchSucceeded = true;
logger.info("IP Ranges initial fetch succeeded.");
} catch (err) {
logger.error("IP Ranges initial fetch failed: " + err.message);
}
logger.info("IP Ranges fetch is enabled");
return internalIpRanges.fetch().catch((err) => {
logger.error("IP Ranges fetch failed, continuing anyway:", err.message);
});
})
.then(() => {
internalCertificate.initTimer();
internalIpRanges.initTimer();

const server = app.listen(3000, () => {
logger.info(`Backend PID ${process.pid} listening on port 3000 ...`);

process.on("SIGTERM", () => {
logger.info(`PID ${process.pid} received SIGTERM`);
server.close(() => {
logger.info("Stopping.");
process.exit(0);
});

if (
IP_RANGES_TIMER_ENABLED === 'true' ||
(IP_RANGES_TIMER_ENABLED !== 'false' && ipRangesFetchSucceeded)
) {
internalIpRanges.initTimer();
logger.info("IP Ranges timer enabled.");
} else {
logger.info("IP Ranges timer not enabled.");
}
} else {
logger.info("IP Ranges fetch is disabled by environment variable");
}

// EO IP Ranges - EdgeOne
if (EO_IP_RANGES_FETCH_ENABLED) {
let eoIpRangesFetchSucceeded = false;
try {
await internalIpRangesEO.fetch();
eoIpRangesFetchSucceeded = true;
logger.info("EO IP Ranges initial fetch succeeded.");
} catch (err) {
logger.error("EO IP Ranges initial fetch failed: " + err.message);
}

if (
EO_IP_RANGES_TIMER_ENABLED === 'true' ||
(EO_IP_RANGES_TIMER_ENABLED !== 'false' && eoIpRangesFetchSucceeded)
) {
internalIpRangesEO.initTimer();
logger.info("EO IP Ranges timer enabled.");
} else {
logger.info("EO IP Ranges timer not enabled.");
}
} else {
logger.info("EO IP Ranges fetch is disabled by environment variable");
}

internalCertificate.initTimer();

const server = app.listen(3000, () => {
logger.info(`Backend PID ${process.pid} listening on port 3000 ...`);

process.on("SIGTERM", () => {
logger.info(`PID ${process.pid} received SIGTERM`);
server.close(() => {
logger.info("Stopping.");
process.exit(0);
});
});
})
.catch((err) => {
logger.error(`Startup Error: ${err.message}`, err);
setTimeout(appStart, 1000);
});
} catch (err) {
logger.error(`Startup Error: ${err.message}`, err);
setTimeout(appStart, 1000);
}
}

try {
Expand Down
Loading