@blamejs/core 0.9.15 → 0.9.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/lib/a2a-tasks.js +2 -2
- package/lib/acme.js +2 -2
- package/lib/api-snapshot.js +1 -1
- package/lib/app-shutdown.js +2 -2
- package/lib/app.js +2 -2
- package/lib/argon2-builtin.js +1 -1
- package/lib/atomic-file.js +8 -8
- package/lib/audit-sign.js +3 -3
- package/lib/audit-tools.js +2 -2
- package/lib/auth/dpop.js +1 -1
- package/lib/auth/elevation-grant.js +4 -4
- package/lib/auth/fido-mds3.js +6 -6
- package/lib/auth/jwt-external.js +3 -3
- package/lib/auth/jwt.js +1 -1
- package/lib/auth/oauth.js +1 -1
- package/lib/auth/status-list.js +1 -1
- package/lib/backup/bundle.js +2 -2
- package/lib/backup/index.js +7 -7
- package/lib/bundler.js +4 -4
- package/lib/cli.js +1 -1
- package/lib/cloud-events.js +1 -1
- package/lib/compliance-sanctions.js +1 -1
- package/lib/compliance.js +6 -7
- package/lib/config.js +6 -6
- package/lib/credential-hash.js +4 -4
- package/lib/crypto-field.js +9 -9
- package/lib/crypto-hpke.js +1 -1
- package/lib/crypto.js +3 -3
- package/lib/daemon.js +2 -2
- package/lib/db-file-lifecycle.js +5 -5
- package/lib/db-schema.js +1 -1
- package/lib/db.js +3 -3
- package/lib/dev.js +5 -5
- package/lib/dr-runbook.js +2 -2
- package/lib/external-db-migrate.js +16 -16
- package/lib/flag-evaluation-context.js +3 -3
- package/lib/flag-providers.js +1 -1
- package/lib/http-client.js +11 -11
- package/lib/http-message-signature.js +1 -1
- package/lib/keychain.js +6 -6
- package/lib/local-db-thin.js +2 -2
- package/lib/log-stream-local.js +3 -3
- package/lib/log-stream-syslog.js +4 -4
- package/lib/log.js +2 -2
- package/lib/mail-arc-sign.js +1 -1
- package/lib/mail-dkim.js +1 -1
- package/lib/mail.js +7 -7
- package/lib/mcp-tool-registry.js +6 -6
- package/lib/middleware/asyncapi-serve.js +1 -1
- package/lib/middleware/body-parser.js +6 -6
- package/lib/middleware/openapi-serve.js +1 -1
- package/lib/middleware/require-bound-key.js +4 -4
- package/lib/middleware/require-mtls.js +4 -4
- package/lib/middleware/tus-upload.js +1 -1
- package/lib/migrations.js +3 -3
- package/lib/mtls-ca.js +4 -4
- package/lib/network-byte-quota.js +2 -2
- package/lib/network-smtp-policy.js +1 -1
- package/lib/network.js +12 -12
- package/lib/notify.js +8 -8
- package/lib/ntp-check.js +1 -1
- package/lib/object-store/azure-blob.js +3 -3
- package/lib/object-store/gcs.js +3 -3
- package/lib/object-store/http-put.js +1 -1
- package/lib/object-store/local.js +3 -3
- package/lib/object-store/sigv4-bucket-ops.js +1 -1
- package/lib/object-store/sigv4.js +3 -3
- package/lib/observability.js +1 -1
- package/lib/parsers/safe-env.js +3 -3
- package/lib/process-spawn.js +2 -2
- package/lib/restore-bundle.js +3 -3
- package/lib/restore-rollback.js +4 -4
- package/lib/restore.js +3 -3
- package/lib/retry.js +1 -1
- package/lib/router.js +16 -16
- package/lib/safe-url.js +2 -2
- package/lib/sandbox.js +1 -1
- package/lib/security-assert.js +1 -1
- package/lib/seeders.js +4 -4
- package/lib/self-update-standalone-verifier.js +2 -2
- package/lib/self-update.js +5 -5
- package/lib/session-device-binding.js +1 -1
- package/lib/storage.js +1 -1
- package/lib/template.js +2 -2
- package/lib/testing.js +2 -2
- package/lib/totp.js +1 -1
- package/lib/vault/index.js +2 -2
- package/lib/vault/passphrase-ops.js +2 -2
- package/lib/vault/passphrase-source.js +2 -2
- package/lib/vault/rotate.js +7 -7
- package/lib/vault/seal-pem-file.js +8 -8
- package/lib/vault-aad.js +5 -5
- package/lib/vendor-data.js +1 -1
- package/lib/watcher.js +5 -5
- package/lib/webhook.js +1 -1
- package/lib/websocket.js +3 -3
- package/lib/ws-client.js +8 -8
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* which omits the CORS header.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
-
var nodeCrypto = require("crypto");
|
|
28
|
+
var nodeCrypto = require("node:crypto");
|
|
29
29
|
var validateOpts = require("../validate-opts");
|
|
30
30
|
var lazyRequire = require("../lazy-require");
|
|
31
31
|
var { defineClass } = require("../framework-error");
|
|
@@ -52,7 +52,7 @@ var defineClass = require("../framework-error").defineClass;
|
|
|
52
52
|
var lazyRequire = require("../lazy-require");
|
|
53
53
|
var validateOpts = require("../validate-opts");
|
|
54
54
|
|
|
55
|
-
var
|
|
55
|
+
var bCrypto = lazyRequire(function () { return require("../crypto"); });
|
|
56
56
|
var audit = lazyRequire(function () { return require("../audit"); });
|
|
57
57
|
|
|
58
58
|
var RequireBoundKeyError = defineClass("RequireBoundKeyError", { alwaysPermanent: true });
|
|
@@ -67,7 +67,7 @@ function _parseBearer(req) {
|
|
|
67
67
|
function _timingSafeStringEqual(a, b) {
|
|
68
68
|
if (typeof a !== "string" || typeof b !== "string") return false;
|
|
69
69
|
if (a.length !== b.length) return false;
|
|
70
|
-
return
|
|
70
|
+
return bCrypto().timingSafeEqual(Buffer.from(a), Buffer.from(b));
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/**
|
|
@@ -243,7 +243,7 @@ function create(opts) {
|
|
|
243
243
|
var fpColon = req.peerFingerprint && req.peerFingerprint.colon;
|
|
244
244
|
if (!fpHex && req.peerCert && req.peerCert.raw) {
|
|
245
245
|
try {
|
|
246
|
-
var fp =
|
|
246
|
+
var fp = bCrypto().hashCertFingerprint(req.peerCert.raw);
|
|
247
247
|
fpHex = fp.hex; fpColon = fp.colon;
|
|
248
248
|
} catch (_e) { /* fall through to refused below */ }
|
|
249
249
|
}
|
|
@@ -256,7 +256,7 @@ function create(opts) {
|
|
|
256
256
|
keyId: record.id || null,
|
|
257
257
|
});
|
|
258
258
|
}
|
|
259
|
-
} else if (!
|
|
259
|
+
} else if (!bCrypto().isCertRevoked(req.peerCert.raw, pinned)) {
|
|
260
260
|
// isCertRevoked returns true on MATCH against the deny-list
|
|
261
261
|
// shape; we use it here as a fingerprint-set membership test
|
|
262
262
|
// because it does the same constant-time hex/colon comparison
|
|
@@ -49,7 +49,7 @@ var defineClass = require("../framework-error").defineClass;
|
|
|
49
49
|
var lazyRequire = require("../lazy-require");
|
|
50
50
|
var validateOpts = require("../validate-opts");
|
|
51
51
|
|
|
52
|
-
var
|
|
52
|
+
var bCrypto = lazyRequire(function () { return require("../crypto"); });
|
|
53
53
|
var audit = lazyRequire(function () { return require("../audit"); });
|
|
54
54
|
|
|
55
55
|
var RequireMtlsError = defineClass("RequireMtlsError", { alwaysPermanent: true });
|
|
@@ -169,18 +169,18 @@ function create(opts) {
|
|
|
169
169
|
// allow/deny matching.
|
|
170
170
|
var fp;
|
|
171
171
|
try {
|
|
172
|
-
fp =
|
|
172
|
+
fp = bCrypto().hashCertFingerprint(peerCert.raw);
|
|
173
173
|
} catch (e) {
|
|
174
174
|
return _refuse(res, "fingerprint-failed", { error: (e && e.message) || String(e) });
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
if (denyList.length > 0 &&
|
|
177
|
+
if (denyList.length > 0 && bCrypto().isCertRevoked(peerCert.raw, denyList)) {
|
|
178
178
|
return _refuse(res, "fingerprint-on-deny-list", {
|
|
179
179
|
fingerprint: fp.colon,
|
|
180
180
|
subject: (peerCert.subject && peerCert.subject.CN) || null,
|
|
181
181
|
});
|
|
182
182
|
}
|
|
183
|
-
if (allowList && allowList.length > 0 && !
|
|
183
|
+
if (allowList && allowList.length > 0 && !bCrypto().isCertRevoked(peerCert.raw, allowList)) {
|
|
184
184
|
return _refuse(res, "fingerprint-not-allowed", {
|
|
185
185
|
fingerprint: fp.colon,
|
|
186
186
|
subject: (peerCert.subject && peerCert.subject.CN) || null,
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
* cannot satisfy.
|
|
41
41
|
*/
|
|
42
42
|
|
|
43
|
-
var nodeCrypto = require("crypto"); // for createHash() in checksum extension
|
|
43
|
+
var nodeCrypto = require("node:crypto"); // for createHash() in checksum extension
|
|
44
44
|
var C = require("../constants");
|
|
45
45
|
var bCrypto = require("../crypto");
|
|
46
46
|
var lazyRequire = require("../lazy-require");
|
package/lib/migrations.js
CHANGED
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
* down() succeeds.
|
|
39
39
|
*/
|
|
40
40
|
|
|
41
|
-
var nodePath = require("path");
|
|
41
|
+
var nodePath = require("node:path");
|
|
42
42
|
var atomicFile = require("./atomic-file");
|
|
43
43
|
var dbSchema = require("./db-schema");
|
|
44
44
|
var lazyRequire = require("./lazy-require");
|
|
45
45
|
var { boot } = require("./log");
|
|
46
46
|
var migrationFiles = require("./migration-files");
|
|
47
47
|
var numericBounds = require("./numeric-bounds");
|
|
48
|
-
var
|
|
48
|
+
var db = lazyRequire(function () { return require("./db"); });
|
|
49
49
|
var validateOpts = require("./validate-opts");
|
|
50
50
|
var { FrameworkError } = require("./framework-error");
|
|
51
51
|
|
|
@@ -224,7 +224,7 @@ function _resolveDb(opts) {
|
|
|
224
224
|
if (opts && opts.db && typeof opts.db.prepare === "function") return opts.db;
|
|
225
225
|
// Fall back to the framework's singleton db when one isn't passed —
|
|
226
226
|
// operator-side wiring usually does `b.migrations.create({ dir })`.
|
|
227
|
-
var d =
|
|
227
|
+
var d = db();
|
|
228
228
|
if (typeof d.prepare !== "function") {
|
|
229
229
|
throw new MigrationError("migrations/no-db",
|
|
230
230
|
"no db handle: pass opts.db or initialize b.db before create()",
|
package/lib/mtls-ca.js
CHANGED
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
* Mutual TLS Certificate Authority — internal CA cert issuance, mTLS gate setup, fingerprint pinning.
|
|
53
53
|
*/
|
|
54
54
|
|
|
55
|
-
var nodeFs = require("fs");
|
|
56
|
-
var nodePath = require("path");
|
|
55
|
+
var nodeFs = require("node:fs");
|
|
56
|
+
var nodePath = require("node:path");
|
|
57
57
|
var nodeCrypto = require("node:crypto");
|
|
58
58
|
var atomicFile = require("./atomic-file");
|
|
59
59
|
var C = require("./constants");
|
|
@@ -324,9 +324,9 @@ function create(opts) {
|
|
|
324
324
|
// so a genuinely-broken filesystem state surfaces in operator logs
|
|
325
325
|
// rather than getting silently swallowed.
|
|
326
326
|
try { if (nodeFs.existsSync(keyTmp)) nodeFs.unlinkSync(keyTmp); }
|
|
327
|
-
catch (cleanupErr) { caLog.debug("cleanup-failed", { op: "
|
|
327
|
+
catch (cleanupErr) { caLog.debug("cleanup-failed", { op: "fs.unlinkSync", path: keyTmp, error: cleanupErr.message }); }
|
|
328
328
|
try { if (nodeFs.existsSync(certTmp)) nodeFs.unlinkSync(certTmp); }
|
|
329
|
-
catch (cleanupErr) { caLog.debug("cleanup-failed", { op: "
|
|
329
|
+
catch (cleanupErr) { caLog.debug("cleanup-failed", { op: "fs.unlinkSync", path: certTmp, error: cleanupErr.message }); }
|
|
330
330
|
throw new MtlsCaError("mtls-ca/commit-failed",
|
|
331
331
|
"atomic CA commit failed: " + ((e && e.message) || String(e)));
|
|
332
332
|
}
|
|
@@ -43,7 +43,7 @@ var defineClass = require("./framework-error").defineClass;
|
|
|
43
43
|
var lazyRequire = require("./lazy-require");
|
|
44
44
|
var validateOpts = require("./validate-opts");
|
|
45
45
|
|
|
46
|
-
var
|
|
46
|
+
var audit = lazyRequire(function () { return require("./audit"); });
|
|
47
47
|
var observability = lazyRequire(function () { return require("./observability"); });
|
|
48
48
|
|
|
49
49
|
var ByteQuotaError = defineClass("ByteQuotaError", { alwaysPermanent: true });
|
|
@@ -181,7 +181,7 @@ function create(opts) {
|
|
|
181
181
|
function _emitAudit(action, outcome, metadata) {
|
|
182
182
|
if (!auditOn) return;
|
|
183
183
|
try {
|
|
184
|
-
|
|
184
|
+
audit().safeEmit({
|
|
185
185
|
action: "network.byte_quota." + action,
|
|
186
186
|
outcome: outcome,
|
|
187
187
|
metadata: metadata || {},
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
|
|
54
54
|
var dns = require("node:dns");
|
|
55
55
|
var dnsPromises = dns.promises;
|
|
56
|
-
var nodeCrypto = require("crypto");
|
|
56
|
+
var nodeCrypto = require("node:crypto");
|
|
57
57
|
var zlib = require("node:zlib");
|
|
58
58
|
var asn1 = require("./asn1-der");
|
|
59
59
|
var lazyRequire = require("./lazy-require");
|
package/lib/network.js
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
var byteQuota = require("./network-byte-quota");
|
|
34
34
|
var ntpCheck = require("./ntp-check");
|
|
35
35
|
var nts = require("./network-nts");
|
|
36
|
-
var
|
|
36
|
+
var networkDns = require("./network-dns");
|
|
37
37
|
var networkProxy = require("./network-proxy");
|
|
38
38
|
var networkTls = require("./network-tls");
|
|
39
39
|
var heartbeat = require("./network-heartbeat");
|
|
@@ -211,15 +211,15 @@ function bootFromEnv(opts) {
|
|
|
211
211
|
var dnsServers = env.BLAMEJS_DNS_SERVERS;
|
|
212
212
|
if (dnsServers) {
|
|
213
213
|
var dl = String(dnsServers).split(",").map(function (s) { return s.trim(); }).filter(Boolean);
|
|
214
|
-
if (dl.length > 0) {
|
|
214
|
+
if (dl.length > 0) { networkDns.setServers(dl); applied.dns.servers = dl.length; }
|
|
215
215
|
}
|
|
216
|
-
if (env.BLAMEJS_DNS_RESULT_ORDER) {
|
|
217
|
-
if (env.BLAMEJS_DNS_FAMILY) {
|
|
218
|
-
if (env.BLAMEJS_DNS_LOOKUP_TIMEOUT_MS) {
|
|
219
|
-
if (env.BLAMEJS_DNS_CACHE_TTL_MS) {
|
|
220
|
-
if (env.BLAMEJS_DOH_URL) {
|
|
221
|
-
else if (env.BLAMEJS_DOH_PROVIDER) {
|
|
222
|
-
if (env.BLAMEJS_DOT_HOST) {
|
|
216
|
+
if (env.BLAMEJS_DNS_RESULT_ORDER) { networkDns.setResultOrder(env.BLAMEJS_DNS_RESULT_ORDER); applied.dns.resultOrder = env.BLAMEJS_DNS_RESULT_ORDER; }
|
|
217
|
+
if (env.BLAMEJS_DNS_FAMILY) { networkDns.setFamily(parseInt(env.BLAMEJS_DNS_FAMILY, 10)); applied.dns.family = parseInt(env.BLAMEJS_DNS_FAMILY, 10); }
|
|
218
|
+
if (env.BLAMEJS_DNS_LOOKUP_TIMEOUT_MS) { networkDns.setLookupTimeoutMs(parseInt(env.BLAMEJS_DNS_LOOKUP_TIMEOUT_MS, 10)); applied.dns.lookupTimeoutMs = parseInt(env.BLAMEJS_DNS_LOOKUP_TIMEOUT_MS, 10); }
|
|
219
|
+
if (env.BLAMEJS_DNS_CACHE_TTL_MS) { networkDns.setCacheTtlMs(parseInt(env.BLAMEJS_DNS_CACHE_TTL_MS, 10)); applied.dns.cacheTtlMs = parseInt(env.BLAMEJS_DNS_CACHE_TTL_MS, 10); }
|
|
220
|
+
if (env.BLAMEJS_DOH_URL) { networkDns.useDnsOverHttps({ url: env.BLAMEJS_DOH_URL }); applied.dns.doh = env.BLAMEJS_DOH_URL; }
|
|
221
|
+
else if (env.BLAMEJS_DOH_PROVIDER) { networkDns.useDnsOverHttps({ provider: env.BLAMEJS_DOH_PROVIDER }); applied.dns.dohProvider = env.BLAMEJS_DOH_PROVIDER; }
|
|
222
|
+
if (env.BLAMEJS_DOT_HOST) { networkDns.useDnsOverTls({ host: env.BLAMEJS_DOT_HOST, port: env.BLAMEJS_DOT_PORT ? parseInt(env.BLAMEJS_DOT_PORT, 10) : 853 }); applied.dns.dot = env.BLAMEJS_DOT_HOST; }
|
|
223
223
|
|
|
224
224
|
if (env.HTTP_PROXY || env.http_proxy || env.HTTPS_PROXY || env.https_proxy ||
|
|
225
225
|
env.NO_PROXY || env.no_proxy || env.ALL_PROXY || env.all_proxy) {
|
|
@@ -286,7 +286,7 @@ function snapshot() {
|
|
|
286
286
|
servers: ntpFacade.getServers(),
|
|
287
287
|
thresholds: ntpCheck.getThresholds(),
|
|
288
288
|
},
|
|
289
|
-
dns:
|
|
289
|
+
dns: networkDns._stateForTest(),
|
|
290
290
|
proxy: networkProxy.snapshot(),
|
|
291
291
|
tls: {
|
|
292
292
|
systemTrust: networkTls.isSystemTrustEnabled(),
|
|
@@ -305,7 +305,7 @@ function _resetForTest() {
|
|
|
305
305
|
ntpFacade._defaultServers = null;
|
|
306
306
|
ntpFacade._defaultTimeoutMs = null;
|
|
307
307
|
if (typeof ntpCheck._resetThresholdsForTest === "function") ntpCheck._resetThresholdsForTest();
|
|
308
|
-
|
|
308
|
+
networkDns._resetForTest();
|
|
309
309
|
networkProxy._resetForTest();
|
|
310
310
|
networkTls._resetForTest();
|
|
311
311
|
heartbeat._resetForTest();
|
|
@@ -316,7 +316,7 @@ function _resetForTest() {
|
|
|
316
316
|
|
|
317
317
|
module.exports = {
|
|
318
318
|
ntp: ntpFacade,
|
|
319
|
-
dns:
|
|
319
|
+
dns: networkDns,
|
|
320
320
|
proxy: networkProxy,
|
|
321
321
|
tls: networkTls,
|
|
322
322
|
heartbeat: heartbeat,
|
package/lib/notify.js
CHANGED
|
@@ -53,10 +53,10 @@ var { NotifyError } = require("./framework-error");
|
|
|
53
53
|
// Lazy-required modules to avoid load-order cycles. retry / observability /
|
|
54
54
|
// redact / httpClient don't currently import notify, but treating them
|
|
55
55
|
// the same way every primitive does keeps the load-order story uniform.
|
|
56
|
-
var
|
|
56
|
+
var retryHelper = lazyRequire(function () { return require("./retry"); });
|
|
57
57
|
var observability = lazyRequire(function () { return require("./observability"); });
|
|
58
|
-
var
|
|
59
|
-
var
|
|
58
|
+
var redact = lazyRequire(function () { return require("./redact"); });
|
|
59
|
+
var httpClient = lazyRequire(function () { return require("./http-client"); });
|
|
60
60
|
|
|
61
61
|
var _err = NotifyError.factory;
|
|
62
62
|
|
|
@@ -222,7 +222,7 @@ function httpJson(opts) {
|
|
|
222
222
|
return {
|
|
223
223
|
name: name,
|
|
224
224
|
send: async function (message, sendOpts) {
|
|
225
|
-
var client = customClient ||
|
|
225
|
+
var client = customClient || httpClient();
|
|
226
226
|
var body;
|
|
227
227
|
var contentType;
|
|
228
228
|
if (bodyFormat === "form") {
|
|
@@ -380,7 +380,7 @@ function create(opts) {
|
|
|
380
380
|
var redactFn = (typeof opts.redact === "function")
|
|
381
381
|
? opts.redact
|
|
382
382
|
// Default: b.redact.redact — the framework's PII detector chain.
|
|
383
|
-
: function (m) { return
|
|
383
|
+
: function (m) { return redact().redact(m); };
|
|
384
384
|
var defaultTimeoutMs = cfg.defaultTimeoutMs;
|
|
385
385
|
var defaultRetry = opts.defaultRetry || null;
|
|
386
386
|
var defaultBreaker = opts.defaultBreaker || null;
|
|
@@ -402,7 +402,7 @@ function create(opts) {
|
|
|
402
402
|
};
|
|
403
403
|
var breakerOpts = entry.breaker || defaultBreaker;
|
|
404
404
|
if (breakerOpts) {
|
|
405
|
-
registry.breaker = new (
|
|
405
|
+
registry.breaker = new (retryHelper().CircuitBreaker)(n, breakerOpts);
|
|
406
406
|
}
|
|
407
407
|
if (entry.serialize) registry.mutex = new safeAsync.Mutex();
|
|
408
408
|
channels[n] = registry;
|
|
@@ -519,7 +519,7 @@ function create(opts) {
|
|
|
519
519
|
try {
|
|
520
520
|
// b.retry.withRetry IS the retry loop. Notify never hand-rolls
|
|
521
521
|
// backoff/jitter/classification — the framework owns it.
|
|
522
|
-
var result = await
|
|
522
|
+
var result = await retryHelper().withRetry(function (attempt) {
|
|
523
523
|
return _attemptSerialized(attempt);
|
|
524
524
|
}, perCallRetry);
|
|
525
525
|
|
|
@@ -647,7 +647,7 @@ function create(opts) {
|
|
|
647
647
|
mutex: null,
|
|
648
648
|
};
|
|
649
649
|
var breakerOpts = entry.breaker || defaultBreaker;
|
|
650
|
-
if (breakerOpts) registry.breaker = new (
|
|
650
|
+
if (breakerOpts) registry.breaker = new (retryHelper().CircuitBreaker)(name, breakerOpts);
|
|
651
651
|
if (entry.serialize) registry.mutex = new safeAsync.Mutex();
|
|
652
652
|
channels[name] = registry;
|
|
653
653
|
}
|
package/lib/ntp-check.js
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
* @card
|
|
45
45
|
* Boot-time clock-drift verification against an external NTP / NTS-KE reference.
|
|
46
46
|
*/
|
|
47
|
-
var dgram = require("dgram");
|
|
47
|
+
var dgram = require("node:dgram");
|
|
48
48
|
var C = require("./constants");
|
|
49
49
|
var lazyRequire = require("./lazy-require");
|
|
50
50
|
var safeAsync = require("./safe-async");
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
* - PutBlock + PutBlockList (multipart for >256MB blobs) is not
|
|
31
31
|
* implemented; uploads above that ceiling will fail at the API.
|
|
32
32
|
*/
|
|
33
|
-
var nodeCrypto = require("crypto");
|
|
34
|
-
var { URL } = require("url");
|
|
35
|
-
var { Readable } = require("stream");
|
|
33
|
+
var nodeCrypto = require("node:crypto");
|
|
34
|
+
var { URL } = require("node:url");
|
|
35
|
+
var { Readable } = require("node:stream");
|
|
36
36
|
var safeXml = require("../parsers/safe-xml");
|
|
37
37
|
var sharedRequest = require("./http-request");
|
|
38
38
|
var C = require("../constants");
|
package/lib/object-store/gcs.js
CHANGED
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
* https://cloud.google.com/storage/docs/json_api/v1
|
|
23
23
|
* https://developers.google.com/identity/protocols/oauth2/service-account
|
|
24
24
|
*/
|
|
25
|
-
var nodeFs = require("fs");
|
|
26
|
-
var nodeCrypto = require("crypto");
|
|
27
|
-
var { Readable } = require("stream");
|
|
25
|
+
var nodeFs = require("node:fs");
|
|
26
|
+
var nodeCrypto = require("node:crypto");
|
|
27
|
+
var { Readable } = require("node:stream");
|
|
28
28
|
var safeJson = require("../safe-json");
|
|
29
29
|
var C = require("../constants");
|
|
30
30
|
var numericBounds = require("../numeric-bounds");
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* Errors are surfaced as object-store errors with statusCode set so the
|
|
17
17
|
* retry layer can classify retryable vs permanent.
|
|
18
18
|
*/
|
|
19
|
-
var { Readable } = require("stream");
|
|
19
|
+
var { Readable } = require("node:stream");
|
|
20
20
|
var { ObjectStoreError } = require("../framework-error");
|
|
21
21
|
var safeUrl = require("../safe-url");
|
|
22
22
|
var sharedRequest = require("./http-request");
|
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Implements the uniform protocol surface (put / get / getStream / delete /
|
|
6
6
|
* head / list) against a directory tree. Streaming is via Node's native
|
|
7
|
-
*
|
|
7
|
+
* fs.createReadStream / createWriteStream — no in-memory buffering of
|
|
8
8
|
* full files.
|
|
9
9
|
*
|
|
10
10
|
* Path safety: every key resolves under the configured rootDir, with an
|
|
11
11
|
* alphanumeric + `_-./` charset whitelist and explicit rejection of any
|
|
12
12
|
* path that escapes rootDir after resolution.
|
|
13
13
|
*/
|
|
14
|
-
var nodeFs = require("fs");
|
|
15
|
-
var nodePath = require("path");
|
|
14
|
+
var nodeFs = require("node:fs");
|
|
15
|
+
var nodePath = require("node:path");
|
|
16
16
|
var atomicFile = require("../atomic-file");
|
|
17
17
|
var cluster = require("../cluster");
|
|
18
18
|
var { ObjectStoreError } = require("../framework-error");
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
* with codes (BUCKET_INVALID_NAME, INVALID_LIFECYCLE, INVALID_CORS_RULE,
|
|
50
50
|
* BUCKET_ALREADY_OWNED, BUCKET_NOT_EMPTY, etc.).
|
|
51
51
|
*/
|
|
52
|
-
var nodeCrypto = require("crypto");
|
|
52
|
+
var nodeCrypto = require("node:crypto");
|
|
53
53
|
var C = require("../constants");
|
|
54
54
|
var requestHelpers = require("../request-helpers");
|
|
55
55
|
var sigv4 = require("./sigv4");
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
* Reference:
|
|
24
24
|
* https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
|
|
25
25
|
*/
|
|
26
|
-
var nodeCrypto = require("crypto");
|
|
27
|
-
var { URL } = require("url");
|
|
28
|
-
var { Readable } = require("stream");
|
|
26
|
+
var nodeCrypto = require("node:crypto");
|
|
27
|
+
var { URL } = require("node:url");
|
|
28
|
+
var { Readable } = require("node:stream");
|
|
29
29
|
var safeXml = require("../parsers/safe-xml");
|
|
30
30
|
var sharedRequest = require("./http-request");
|
|
31
31
|
var C = require("../constants");
|
package/lib/observability.js
CHANGED
|
@@ -469,7 +469,7 @@ function _buildTraceparent(opts) {
|
|
|
469
469
|
return "00-" + traceId + "-" + parentId + "-" + flags;
|
|
470
470
|
}
|
|
471
471
|
|
|
472
|
-
var _nodeCryptoForTrace = require("crypto");
|
|
472
|
+
var _nodeCryptoForTrace = require("node:crypto");
|
|
473
473
|
|
|
474
474
|
function _newTraceId() {
|
|
475
475
|
var hex = _nodeCryptoForTrace.randomBytes(_TRACE_ID_BYTES).toString("hex");
|
package/lib/parsers/safe-env.js
CHANGED
|
@@ -68,7 +68,7 @@ var { boot } = require("../log");
|
|
|
68
68
|
// (transitively) vault, which leaves safe-env's module.exports
|
|
69
69
|
// half-built when vault first reaches readVar. Defer audit resolution
|
|
70
70
|
// until the first emit-driven call.
|
|
71
|
-
var
|
|
71
|
+
var audit = lazyRequire(function () { return require("../audit"); });
|
|
72
72
|
|
|
73
73
|
var log = boot("env");
|
|
74
74
|
|
|
@@ -519,11 +519,11 @@ function _writeAuditRows(filepath, diff) {
|
|
|
519
519
|
// we're a follower, audit.record will throw NotLeaderError. Catch
|
|
520
520
|
// explicitly: a follower's local config-load shouldn't crash because
|
|
521
521
|
// the cluster's audit chain belongs to the leader.
|
|
522
|
-
var
|
|
522
|
+
var auditInst = audit(); // resolve the lazy-required audit module
|
|
523
523
|
|
|
524
524
|
function _safeRecord(action, metadata) {
|
|
525
525
|
try {
|
|
526
|
-
|
|
526
|
+
auditInst.emit({
|
|
527
527
|
actor: { kind: "system", id: "config-loader" },
|
|
528
528
|
action: action,
|
|
529
529
|
outcome: "success",
|
package/lib/process-spawn.js
CHANGED
|
@@ -171,8 +171,8 @@ function spawn(command, args, opts) {
|
|
|
171
171
|
filtered = built.filtered;
|
|
172
172
|
}
|
|
173
173
|
delete spawnOpts.allowEnv;
|
|
174
|
-
var
|
|
175
|
-
var child =
|
|
174
|
+
var childProcess = require("node:child_process");
|
|
175
|
+
var child = childProcess.spawn(command, args || [], spawnOpts);
|
|
176
176
|
try {
|
|
177
177
|
audit().safeEmit({
|
|
178
178
|
action: "process.spawn",
|
package/lib/restore-bundle.js
CHANGED
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
* Backup-bundle reader — verify the manifest signature, list bundle contents without decrypting, and cherry-pick a restore subset to a staging directory the caller atomically swaps into place.
|
|
46
46
|
*/
|
|
47
47
|
|
|
48
|
-
var nodeFs = require("fs");
|
|
49
|
-
var nodePath = require("path");
|
|
48
|
+
var nodeFs = require("node:fs");
|
|
49
|
+
var nodePath = require("node:path");
|
|
50
50
|
var atomicFile = require("./atomic-file");
|
|
51
51
|
var backupCrypto = require("./backup/crypto");
|
|
52
52
|
var backupManifest = require("./backup/manifest");
|
|
@@ -131,7 +131,7 @@ async function extract(opts) {
|
|
|
131
131
|
if (nodeFs.existsSync(opts.stagingDir)) {
|
|
132
132
|
throw new RestoreBundleError("restore-bundle/staging-exists",
|
|
133
133
|
"extract: stagingDir already exists: " + opts.stagingDir +
|
|
134
|
-
" (refusing to merge into existing directory — pick a fresh
|
|
134
|
+
" (refusing to merge into existing directory — pick a fresh path)");
|
|
135
135
|
}
|
|
136
136
|
if (!Buffer.isBuffer(opts.passphrase) && typeof opts.passphrase !== "string") {
|
|
137
137
|
throw new RestoreBundleError("restore-bundle/no-passphrase",
|
package/lib/restore-rollback.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @intro
|
|
8
8
|
* Backup-restore safety net — atomic dataDir swap with a versioned
|
|
9
|
-
* rollback
|
|
9
|
+
* rollback path. The primitive `b.restore` calls to put a
|
|
10
10
|
* freshly-decrypted bundle into place: filesystem rename is atomic
|
|
11
11
|
* on POSIX (and on Windows when nothing has the dir open), so the
|
|
12
12
|
* swap either fully completes or the previous `dataDir` is
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
* corrupting state.
|
|
40
40
|
*
|
|
41
41
|
* @card
|
|
42
|
-
* Backup-restore safety net — atomic dataDir swap with a versioned rollback
|
|
42
|
+
* Backup-restore safety net — atomic dataDir swap with a versioned rollback path.
|
|
43
43
|
*/
|
|
44
44
|
|
|
45
|
-
var nodeFs = require("fs");
|
|
46
|
-
var nodePath = require("path");
|
|
45
|
+
var nodeFs = require("node:fs");
|
|
46
|
+
var nodePath = require("node:path");
|
|
47
47
|
var atomicFile = require("./atomic-file");
|
|
48
48
|
var C = require("./constants");
|
|
49
49
|
var numericBounds = require("./numeric-bounds");
|
package/lib/restore.js
CHANGED
|
@@ -51,9 +51,9 @@
|
|
|
51
51
|
* manual recovery)
|
|
52
52
|
*/
|
|
53
53
|
|
|
54
|
-
var nodeFs = require("fs");
|
|
55
|
-
var os = require("os");
|
|
56
|
-
var nodePath = require("path");
|
|
54
|
+
var nodeFs = require("node:fs");
|
|
55
|
+
var os = require("node:os");
|
|
56
|
+
var nodePath = require("node:path");
|
|
57
57
|
var C = require("./constants");
|
|
58
58
|
var bCrypto = require("./crypto");
|
|
59
59
|
var numericChecks = require("./numeric-checks");
|
package/lib/retry.js
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
var C = require("./constants");
|
|
41
41
|
var lazyRequire = require("./lazy-require");
|
|
42
|
-
var nodeCrypto = require("crypto");
|
|
42
|
+
var nodeCrypto = require("node:crypto");
|
|
43
43
|
var numericChecks = require("./numeric-checks");
|
|
44
44
|
// safe-async re-exports withRetry + CircuitBreaker from this module, so a
|
|
45
45
|
// direct top-level require would create a cycle. Lazy-require defers the
|
package/lib/router.js
CHANGED
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
* @card
|
|
33
33
|
* HTTP route registration + dispatch.
|
|
34
34
|
*/
|
|
35
|
-
var http = require("http");
|
|
36
|
-
var http2 = require("http2");
|
|
37
|
-
var nodeFs = require("fs");
|
|
38
|
-
var nodePath = require("path");
|
|
35
|
+
var http = require("node:http");
|
|
36
|
+
var http2 = require("node:http2");
|
|
37
|
+
var nodeFs = require("node:fs");
|
|
38
|
+
var nodePath = require("node:path");
|
|
39
39
|
var C = require("./constants");
|
|
40
40
|
var requestHelpers = require("./request-helpers");
|
|
41
41
|
var lazyRequire = require("./lazy-require");
|
|
@@ -46,11 +46,11 @@ var websocket = require("./websocket");
|
|
|
46
46
|
var { boot } = require("./log");
|
|
47
47
|
var { RouterError } = require("./framework-error");
|
|
48
48
|
|
|
49
|
-
var
|
|
49
|
+
var audit = lazyRequire(function () { return require("./audit"); });
|
|
50
50
|
// compliance — lazy because router.js is required during boot before
|
|
51
51
|
// the operator's `b.compliance.set(...)` runs; the posture lookup only
|
|
52
52
|
// matters at listen() time, well after boot finishes.
|
|
53
|
-
var
|
|
53
|
+
var compliance = lazyRequire(function () { return require("./compliance"); });
|
|
54
54
|
|
|
55
55
|
var log = boot("router");
|
|
56
56
|
var HTTP_STATUS = requestHelpers.HTTP_STATUS;
|
|
@@ -733,12 +733,12 @@ class Router {
|
|
|
733
733
|
if (declared !== "replay-cache") return declared;
|
|
734
734
|
var active = null;
|
|
735
735
|
try {
|
|
736
|
-
var
|
|
737
|
-
if (
|
|
736
|
+
var complianceInst = compliance();
|
|
737
|
+
if (complianceInst && typeof complianceInst.current === "function") active = complianceInst.current();
|
|
738
738
|
} catch (_e) { /* compliance not initialized */ }
|
|
739
739
|
if (active && TLS_0RTT_FAILCLOSED_POSTURES.indexOf(active) !== -1) {
|
|
740
740
|
try {
|
|
741
|
-
|
|
741
|
+
audit().safeEmit({
|
|
742
742
|
action: "tls.0rtt.refused",
|
|
743
743
|
outcome: "denied",
|
|
744
744
|
metadata: { reason: "posture-failclosed", posture: active, declared: declared },
|
|
@@ -759,7 +759,7 @@ class Router {
|
|
|
759
759
|
if (String(earlyDataHeader).trim() !== "1") return null; // RFC 8470: only "1" means early data
|
|
760
760
|
if (posture === "refuse") {
|
|
761
761
|
try {
|
|
762
|
-
|
|
762
|
+
audit().safeEmit({
|
|
763
763
|
action: "tls.0rtt.refused",
|
|
764
764
|
outcome: "denied",
|
|
765
765
|
metadata: { reason: "posture-refuse", method: req.method, url: req.url },
|
|
@@ -783,7 +783,7 @@ class Router {
|
|
|
783
783
|
var key = hash.digest("hex");
|
|
784
784
|
if (this._tls0RttReplayCache.has(key)) {
|
|
785
785
|
try {
|
|
786
|
-
|
|
786
|
+
audit().safeEmit({
|
|
787
787
|
action: "tls.0rtt.replayed",
|
|
788
788
|
outcome: "denied",
|
|
789
789
|
metadata: { reason: "cache-hit", method: req.method, url: req.url,
|
|
@@ -805,7 +805,7 @@ class Router {
|
|
|
805
805
|
}
|
|
806
806
|
this._tls0RttReplayCache.set(key, nowMs + TLS_0RTT_REPLAY_WINDOW_MS);
|
|
807
807
|
try {
|
|
808
|
-
|
|
808
|
+
audit().safeEmit({
|
|
809
809
|
action: "tls.0rtt.accepted",
|
|
810
810
|
outcome: "success",
|
|
811
811
|
metadata: { method: req.method, url: req.url, windowMs: TLS_0RTT_REPLAY_WINDOW_MS },
|
|
@@ -889,7 +889,7 @@ class Router {
|
|
|
889
889
|
});
|
|
890
890
|
} catch (parseErr) {
|
|
891
891
|
try {
|
|
892
|
-
|
|
892
|
+
audit().safeEmit({
|
|
893
893
|
action: "router.redirect.cross_origin.refused",
|
|
894
894
|
outcome: "denied",
|
|
895
895
|
metadata: {
|
|
@@ -913,7 +913,7 @@ class Router {
|
|
|
913
913
|
}
|
|
914
914
|
if (!match) {
|
|
915
915
|
try {
|
|
916
|
-
|
|
916
|
+
audit().safeEmit({
|
|
917
917
|
action: "router.redirect.cross_origin.refused",
|
|
918
918
|
outcome: "denied",
|
|
919
919
|
metadata: {
|
|
@@ -930,7 +930,7 @@ class Router {
|
|
|
930
930
|
);
|
|
931
931
|
}
|
|
932
932
|
try {
|
|
933
|
-
|
|
933
|
+
audit().safeEmit({
|
|
934
934
|
action: "router.redirect.cross_origin.allowed",
|
|
935
935
|
outcome: "success",
|
|
936
936
|
metadata: { target: url, origin: targetOrigin },
|
|
@@ -1064,7 +1064,7 @@ class Router {
|
|
|
1064
1064
|
// (a clean peer would not initiate after GOAWAY).
|
|
1065
1065
|
h2session.on("stream", function (stream) {
|
|
1066
1066
|
if (h2session._blamejsGoawaySent) {
|
|
1067
|
-
try {
|
|
1067
|
+
try { audit().safeEmit({
|
|
1068
1068
|
action: "http2.window_update.refused",
|
|
1069
1069
|
outcome: "denied",
|
|
1070
1070
|
metadata: { reason: "post-goaway-stream", streamId: stream.id || null,
|
package/lib/safe-url.js
CHANGED
|
@@ -49,8 +49,8 @@ var codepointClass = require("./codepoint-class");
|
|
|
49
49
|
var lazyRequire = require("./lazy-require");
|
|
50
50
|
var numericBounds = require("./numeric-bounds");
|
|
51
51
|
var { FrameworkError } = require("./framework-error");
|
|
52
|
-
var nodeUrl = require("url");
|
|
53
|
-
var { URL } = require("url");
|
|
52
|
+
var nodeUrl = require("node:url");
|
|
53
|
+
var { URL } = require("node:url");
|
|
54
54
|
|
|
55
55
|
var audit = lazyRequire(function () { return require("./audit"); });
|
|
56
56
|
|
package/lib/sandbox.js
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
* arbitrary source from the public internet.
|
|
79
79
|
*/
|
|
80
80
|
|
|
81
|
-
var nodePath = require("path");
|
|
81
|
+
var nodePath = require("node:path");
|
|
82
82
|
var lazyRequire = require("./lazy-require");
|
|
83
83
|
var validateOpts = require("./validate-opts");
|
|
84
84
|
var numericBounds = require("./numeric-bounds");
|
package/lib/security-assert.js
CHANGED
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
* non-function extra entry, etc.) so the operator catches typos at
|
|
68
68
|
* boot, not at the moment they were trying to gate the boot.
|
|
69
69
|
*/
|
|
70
|
-
var nodeFs = require("fs");
|
|
70
|
+
var nodeFs = require("node:fs");
|
|
71
71
|
var nodeTls = require("node:tls");
|
|
72
72
|
var lazyRequire = require("./lazy-require");
|
|
73
73
|
var safeEnv = require("./parsers/safe-env");
|