Girish Ramakrishnan
36aa641cb9
migrate to "export default"
...
also, set no-use-before-define in linter
2026-02-14 15:43:24 +01:00
Girish Ramakrishnan
96dc79cfe6
Migrate codebase from CommonJS to ES Modules
...
- Convert all require()/module.exports to import/export across 260+ files
- Add "type": "module" to package.json to enable ESM by default
- Add migrations/package.json with "type": "commonjs" to keep db-migrate compatible
- Convert eslint.config.js to ESM with sourceType: "module"
- Replace __dirname/__filename with import.meta.dirname/import.meta.filename
- Replace require.main === module with process.argv[1] === import.meta.filename
- Remove 'use strict' directives (implicit in ESM)
- Convert dynamic require() in switch statements to static import lookup maps
(dns.js, domains.js, backupformats.js, backupsites.js, network.js)
- Extract self-referencing exports.CONSTANT patterns into standalone const
declarations (apps.js, services.js, locks.js, users.js, mail.js, etc.)
- Lazify SERVICES object in services.js to avoid circular dependency TDZ issues
- Add clearMailQueue() to mailer.js for ESM-safe queue clearing in tests
- Add _setMockApp() to ldapserver.js for ESM-safe test mocking
- Add _setMockResolve() wrapper to dig.js for ESM-safe DNS mocking in tests
- Convert backupupload.js to use dynamic imports so --check exits before
loading the module graph (which requires BOX_ENV)
- Update check-install to use ESM import for infra_version.js
- Convert scripts/ (hotfix, release, remote_hotfix.js, find-unused-translations)
- All 1315 tests passing
Migration stats (AI-assisted using Cursor with Claude):
- Wall clock time: ~3-4 hours
- Assistant completions: ~80-100
- Estimated token usage: ~1-2M tokens
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 15:11:45 +01:00
Girish Ramakrishnan
12e073e8cf
use node: prefix for requires
...
mostly because code is being autogenerated by all the AI stuff using
this prefix. it's also used in the stack trace.
2025-08-14 12:55:35 +05:30
Girish Ramakrishnan
d9c104613c
tasks: rework the startTask API
...
it is now async. change was required to reset the pending flag
2025-06-17 19:32:46 +02:00
Girish Ramakrishnan
4ce9c46215
dyndns: update mail server location
2024-05-17 13:23:47 +02:00
Girish Ramakrishnan
eee49a8291
move dashboard setting into dashboard.js
2023-08-11 21:04:10 +05:30
Girish Ramakrishnan
47d57a3971
fold sysinfo into network
...
the backends are network backends
2023-08-03 13:38:42 +05:30
Girish Ramakrishnan
d9d38ae402
dyndns: keep going if one or more domains fail to update
2023-07-09 08:09:36 +05:30
Girish Ramakrishnan
23f0eba1bd
dyndns: run as a task
...
this lets us display logs
2023-07-08 21:21:06 +05:30
Girish Ramakrishnan
a98588d924
dyndns: update dynamic dns of apps that are updating
2023-03-24 08:55:33 +01:00
Girish Ramakrishnan
3bdc5731ea
syncDns: sync secondary dns records
2023-02-08 23:16:48 +01:00
Girish Ramakrishnan
c33266ce03
dyndns: update secondary/redirect/alias domains as well
2023-02-08 23:07:53 +01:00
Girish Ramakrishnan
116cde19f9
constants: location -> subdomain
2022-07-14 15:18:17 +05:30
Girish Ramakrishnan
f48690ee11
dyndns: fix typo
2022-03-15 09:53:54 -07:00
Girish Ramakrishnan
c6da8c8167
make ipv4 and ipv6 settings separate
2022-02-15 12:36:05 -08:00
Girish Ramakrishnan
e8d08968a1
rename location to subdomain
...
the primary subdomain was previously called 'location'. but the alias/secondary/redirect
subdomain is called 'subdomain'. this makes it all consistent.
location terminology is now used for { subdomain, domain } pair
2022-01-16 12:48:29 -08:00
Girish Ramakrishnan
d65ac353fe
initial ipv6 support
...
this adds and waits for AAAA records based on setting. we have to wait
for both A and AAAA because we don't know if the user is accessing via
IPv4 or IPv6. For Let's Encrypt, IPv6 is preferred (but not sure if it
retries if IPv6 is unreachable).
part of #264
2022-01-06 17:22:45 -08:00
Girish Ramakrishnan
bbf1a5af3d
sysinfo: add interface to get IPv6 address
2022-01-05 18:08:15 -08:00
Girish Ramakrishnan
51d067cbe3
sysinfo: async'ify
...
in the process, provision, dyndns, mail, dns also got further asyncified
2021-09-02 16:19:46 -07:00
Girish Ramakrishnan
77f5cb183b
merge appdb.js into apps.js
2021-08-23 15:35:38 -07:00
Girish Ramakrishnan
5bcf1bc47b
merge domaindb.js into domains.js
2021-08-16 14:41:42 -07:00
Girish Ramakrishnan
44ac406e57
admin -> dashboard
2021-05-05 12:29:04 -07:00
Girish Ramakrishnan
442110a437
lint
2021-05-01 11:21:09 -07:00
Girish Ramakrishnan
7d987d7c79
make sysinfo provider a setting
2019-10-29 15:56:50 -07:00
Girish Ramakrishnan
dd0fb8292c
Move state enums to the model code
2019-08-30 13:21:51 -07:00
Girish Ramakrishnan
9b74bb73aa
config.js is dead, long live config.js
...
we use settings now
2019-07-26 14:51:51 -07:00
Girish Ramakrishnan
39c0409d42
only notify automated backup failures
2019-03-25 15:15:35 -07:00
Girish Ramakrishnan
2051b3921b
Use constants.ADMIN_LOCATION instead
...
part of #621
2019-03-09 20:06:12 -08:00
Girish Ramakrishnan
efbc045c8a
Add event for tracking dyndns changes
2019-01-12 15:24:22 -08:00
Girish Ramakrishnan
3b987f1970
DNS -> Dns
2018-02-08 12:05:29 -08:00
Girish Ramakrishnan
b2363271aa
add config.adminDomain
2018-01-28 14:26:41 -08:00
Girish Ramakrishnan
9059a30b89
refactor dns logic in cloudron.js
2018-01-25 14:46:48 -08:00