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
cd5cae33ce
dns: switch over to systemd for the host
...
this changes unbound to listen to 127.0.0.150 (150 is roman CL)
we cannot only bind on docker bridge because unbound is relied
upon for the initial domain setup. docker itself is only initialized
when the platform initializes
2024-04-29 11:06:03 +02:00
Girish Ramakrishnan
f6e4f1aefc
network: ipv4 can be disabled
2024-04-25 15:50:42 +02:00
Girish Ramakrishnan
47d57a3971
fold sysinfo into network
...
the backends are network backends
2023-08-03 13:38:42 +05:30
Girish Ramakrishnan
b70572a6e9
dns: fqdn only needs domain string
...
This is from the caas days, when we had hyphenated subdomains flag
2022-11-28 21:56:25 +01:00
Girish Ramakrishnan
4396bd3ea7
wildcard: handle ENODATA
2022-03-08 17:14:42 -08:00
Girish Ramakrishnan
149f778652
wildcard: better error message
2022-02-16 20:22:50 -08:00
Girish Ramakrishnan
c6da8c8167
make ipv4 and ipv6 settings separate
2022-02-15 12:36:05 -08:00
Girish Ramakrishnan
964c1a5f5a
remove field from errors
...
we have standardized on indexOf in error.message by now
2022-02-07 13:44:29 -08:00
Girish Ramakrishnan
5d415d4d7d
make cloudflare, gandi, manual, noop, wildcard, netcup, godaddy, namecom async
2022-02-04 14:36:30 -08:00
Girish Ramakrishnan
0373fb70d5
make waitForDns async
...
cloudflare is partly broken
2022-02-03 17:35:45 -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
bf51bc25e9
dnsConfig -> domainConfig
...
this prepares for the incoming settings.getDnsConfig()
2022-01-05 22:56:10 -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
5bcf1bc47b
merge domaindb.js into domains.js
2021-08-16 14:41:42 -07:00
Girish Ramakrishnan
199eda82d1
Use Array.isArray instead
2021-05-02 11:26:47 -07:00
Girish Ramakrishnan
7d987d7c79
make sysinfo provider a setting
2019-10-29 15:56:50 -07:00
Girish Ramakrishnan
51cb3b0ba8
Move DomainsError to BoxError
2019-10-23 15:15:19 -07:00
Johannes Zellner
127b22d7ce
Add dns interface api to inject hidden files for verification
2019-02-09 19:09:51 +01:00
Johannes Zellner
32f8a52c2b
add provider specific removePrivateFields to redact tokens and secrets
2019-02-09 11:59:37 +01:00
Girish Ramakrishnan
65210ea91d
rework dns api to take domainObject
...
the DNS backends require many different params, it's just easier to
pass them all together and have backends do whatever.
For example, route53 API requires the fqdn. Some other backends require just the
"part" to insert.
* location - location in the database (where app is installed)
* zoneName - the dns zone name
* domain - domain in the database (where apps are installed into)
* name/getName() - this returns the name to insert in the DNS based on zoneName/location
* fqdn - the fully resolved location in zoneName
verifyDnsConfig also takes a domain object even if it's not in db just so that we can
test even existing domain objects, if required. The IP param is removed since it's not
required.
for caas, we also don't need the fqdn hack in dnsConfig anymore
2019-01-04 22:38:12 -08:00
Girish Ramakrishnan
a756345138
consolidate hyphenatedSubdomains handling
2018-09-11 21:41:50 -07:00
Girish Ramakrishnan
76f5b22c07
dns: implement wildcard dns validation
2018-09-06 20:45:10 -07:00
Girish Ramakrishnan
370e4f7c25
rename wildcard to noop
2016-10-08 13:00:40 -07:00
Girish Ramakrishnan
72f287c4e5
Fix typos
2016-10-07 14:19:44 -07:00
Girish Ramakrishnan
49e3dba1f2
Add DNS wildcard backend
...
It assumes that the user setup the wildcard DNS entry manually.
2016-10-07 14:09:20 -07:00