@blamejs/core 0.17.12 → 0.17.14
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 +4 -0
- package/NOTICE +1 -1
- package/index.js +2 -0
- package/lib/app-shutdown.js +23 -20
- package/lib/audit.js +7 -5
- package/lib/bundler.js +5 -1
- package/lib/content-digest.js +2 -1
- package/lib/crypto.js +252 -8
- package/lib/daemon.js +268 -24
- package/lib/db-declare-view.js +2 -2
- package/lib/db.js +4 -1
- package/lib/dev.js +5 -1
- package/lib/dsr.js +1 -1
- package/lib/flag-providers.js +27 -15
- package/lib/i18n-messageformat.js +3 -2
- package/lib/log-stream-otlp-grpc.js +5 -1
- package/lib/log-stream-otlp.js +5 -1
- package/lib/log-stream.js +5 -2
- package/lib/middleware/bot-guard.js +5 -9
- package/lib/outbox.js +1 -1
- package/lib/pid-probe.js +55 -0
- package/lib/pqc-agent.js +8 -1
- package/lib/redact.js +54 -0
- package/lib/safe-object.js +80 -0
- package/lib/self-update-standalone-verifier.js +74 -27
- package/lib/self-update.js +497 -87
- package/lib/ssrf-guard.js +52 -0
- package/lib/vendor/MANIFEST.json +11 -11
- package/lib/vendor/public-suffix-list.dat +6 -7
- package/lib/vendor/public-suffix-list.data.js +1317 -1317
- package/lib/watcher.js +89 -17
- package/lib/webhook-dispatcher.js +1 -1
- package/lib/ws-client.js +17 -0
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
package/lib/ssrf-guard.js
CHANGED
|
@@ -820,6 +820,56 @@ function isPrivate(ip) { return classify(ip) === "private"; }
|
|
|
820
820
|
*/
|
|
821
821
|
function isLoopback(ip) { return classify(ip) === "loopback"; }
|
|
822
822
|
|
|
823
|
+
/**
|
|
824
|
+
* @primitive b.ssrfGuard.isLoopbackHost
|
|
825
|
+
* @signature b.ssrfGuard.isLoopbackHost(host)
|
|
826
|
+
* @since 0.17.13
|
|
827
|
+
* @status stable
|
|
828
|
+
* @related b.ssrfGuard.isExactLoopbackName, b.ssrfGuard.isLoopback, b.ssrfGuard.canonicalizeHost
|
|
829
|
+
*
|
|
830
|
+
* Hostname-aware loopback test. Unlike `isLoopback` (IP literals only) this
|
|
831
|
+
* canonicalizes `host` (strips `[]` brackets + trailing dots, folds an
|
|
832
|
+
* IPv4-mapped IPv6, lowercases) and returns `true` for a loopback IP literal
|
|
833
|
+
* OR the RFC 6761 §6.3 reserved names `localhost` and any `*.localhost`. Pure
|
|
834
|
+
* name-shape — never resolves DNS.
|
|
835
|
+
*
|
|
836
|
+
* @example
|
|
837
|
+
* b.ssrfGuard.isLoopbackHost("localhost"); // → true
|
|
838
|
+
* b.ssrfGuard.isLoopbackHost("[::1]"); // → true
|
|
839
|
+
* b.ssrfGuard.isLoopbackHost("app.localhost"); // → true
|
|
840
|
+
* b.ssrfGuard.isLoopbackHost("example.com"); // → false
|
|
841
|
+
*/
|
|
842
|
+
function isLoopbackHost(host) {
|
|
843
|
+
if (typeof host !== "string" || host.length === 0) return false;
|
|
844
|
+
var canon = canonicalizeHost(host);
|
|
845
|
+
if (net.isIP(canon)) return classify(canon) === "loopback";
|
|
846
|
+
return canon === "localhost" || /\.localhost$/.test(canon);
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
/**
|
|
850
|
+
* @primitive b.ssrfGuard.isExactLoopbackName
|
|
851
|
+
* @signature b.ssrfGuard.isExactLoopbackName(host)
|
|
852
|
+
* @since 0.17.13
|
|
853
|
+
* @status stable
|
|
854
|
+
* @related b.ssrfGuard.isLoopbackHost
|
|
855
|
+
*
|
|
856
|
+
* Like `isLoopbackHost` but WITHOUT the `*.localhost` subdomain reservation —
|
|
857
|
+
* accepts only the exact `localhost` name or a loopback IP literal. For the
|
|
858
|
+
* OAuth/OIDC cleartext-redirect loopback exception (RFC 9700 §4.1.1), which
|
|
859
|
+
* must not widen to a `*.localhost` name an attacker could register in a resolver.
|
|
860
|
+
*
|
|
861
|
+
* @example
|
|
862
|
+
* b.ssrfGuard.isExactLoopbackName("localhost"); // → true
|
|
863
|
+
* b.ssrfGuard.isExactLoopbackName("127.0.0.1"); // → true
|
|
864
|
+
* b.ssrfGuard.isExactLoopbackName("app.localhost"); // → false
|
|
865
|
+
*/
|
|
866
|
+
function isExactLoopbackName(host) {
|
|
867
|
+
if (typeof host !== "string" || host.length === 0) return false;
|
|
868
|
+
var canon = canonicalizeHost(host);
|
|
869
|
+
if (net.isIP(canon)) return classify(canon) === "loopback";
|
|
870
|
+
return canon === "localhost";
|
|
871
|
+
}
|
|
872
|
+
|
|
823
873
|
/**
|
|
824
874
|
* @primitive b.ssrfGuard.isLinkLocal
|
|
825
875
|
* @signature b.ssrfGuard.isLinkLocal(ip)
|
|
@@ -958,6 +1008,8 @@ module.exports = {
|
|
|
958
1008
|
createAllowlist: createAllowlist,
|
|
959
1009
|
isPrivate: isPrivate,
|
|
960
1010
|
isLoopback: isLoopback,
|
|
1011
|
+
isLoopbackHost: isLoopbackHost,
|
|
1012
|
+
isExactLoopbackName: isExactLoopbackName,
|
|
961
1013
|
isLinkLocal: isLinkLocal,
|
|
962
1014
|
isCloudMetadata: isCloudMetadata,
|
|
963
1015
|
isReserved: isReserved,
|
package/lib/vendor/MANIFEST.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"hashes": {
|
|
19
19
|
"server": "sha256:2b30a26f728c5349f4c4b47834f862a4f77393b1224fc12b22abe3ce2cfab78f"
|
|
20
20
|
},
|
|
21
|
-
"refreshedAt": "2026-07-
|
|
21
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
22
22
|
},
|
|
23
23
|
"@noble/curves": {
|
|
24
24
|
"version": "2.2.0",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"hashes": {
|
|
41
41
|
"server": "sha256:2880c288b1285ef51d356d057bee6f0c8a00de36638cf47b47617e8c1faf10d5"
|
|
42
42
|
},
|
|
43
|
-
"refreshedAt": "2026-07-
|
|
43
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
44
44
|
},
|
|
45
45
|
"@noble/post-quantum": {
|
|
46
46
|
"version": "0.6.1",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"hashes": {
|
|
72
72
|
"server": "sha256:f9c94094b3c10fe73dac5343289da582454ea6053494fab2bf66099d9103d6c3"
|
|
73
73
|
},
|
|
74
|
-
"refreshedAt": "2026-07-
|
|
74
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
75
75
|
},
|
|
76
76
|
"@simplewebauthn/server": {
|
|
77
77
|
"version": "13.3.2",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"hashes": {
|
|
95
95
|
"server": "sha256:e83195dc9f189385da9c856ef38843f4466f93ea8f3d7fc2efcb1e1b18da6f20"
|
|
96
96
|
},
|
|
97
|
-
"refreshedAt": "2026-07-
|
|
97
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
98
98
|
},
|
|
99
99
|
"SecLists-common-passwords-top-10000": {
|
|
100
100
|
"version": "10k-most-common (master)",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
},
|
|
115
115
|
"runtime_artifact": "lib/vendor/common-passwords-top-10000.data.js",
|
|
116
116
|
"integrity_layers": "sha256 + sha3-512 + SLH-DSA-SHAKE-256f signature + in-payload canary (where applicable)",
|
|
117
|
-
"refreshedAt": "2026-07-
|
|
117
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
118
118
|
},
|
|
119
119
|
"bimi-trust-anchors": {
|
|
120
120
|
"version": "operator-managed",
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
},
|
|
140
140
|
"runtime_artifact": "lib/vendor/bimi-trust-anchors.data.js",
|
|
141
141
|
"integrity_layers": "sha256 + sha3-512 + SLH-DSA-SHAKE-256f signature + in-payload canary (where applicable)",
|
|
142
|
-
"refreshedAt": "2026-07-
|
|
142
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
143
143
|
},
|
|
144
144
|
"publicsuffix-list": {
|
|
145
145
|
"version": "master",
|
|
@@ -152,14 +152,14 @@
|
|
|
152
152
|
"data_js": "lib/vendor/public-suffix-list.data.js"
|
|
153
153
|
},
|
|
154
154
|
"bundler": "curl https://publicsuffix.org/list/public_suffix_list.dat",
|
|
155
|
-
"bundledAt": "2026-07-
|
|
155
|
+
"bundledAt": "2026-07-23T00:00:00Z",
|
|
156
156
|
"hashes": {
|
|
157
|
-
"server": "sha256:
|
|
158
|
-
"data_js": "sha256:
|
|
157
|
+
"server": "sha256:04220f6e1c20c9af1edfcd891dd4663b2c92a020b13e698dd13b3630573520ca",
|
|
158
|
+
"data_js": "sha256:52428436de68a79537db52f2b0cb7ac0a1cc3e6397db87533c6e2f1bd2e12087"
|
|
159
159
|
},
|
|
160
160
|
"runtime_artifact": "lib/vendor/public-suffix-list.data.js",
|
|
161
161
|
"integrity_layers": "sha256 + sha3-512 + SLH-DSA-SHAKE-256f signature + in-payload canary (where applicable)",
|
|
162
|
-
"refreshedAt": "2026-07-
|
|
162
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
163
163
|
},
|
|
164
164
|
"peculiar-pki": {
|
|
165
165
|
"version": "2.0.0+pkijs-3.4.0",
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
"hashes": {
|
|
191
191
|
"server": "sha256:2307ef65e070757ffb13442b377e45efb9fa1a10432d9b39618387720ab990ed"
|
|
192
192
|
},
|
|
193
|
-
"refreshedAt": "2026-07-
|
|
193
|
+
"refreshedAt": "2026-07-23T22:29:23.692Z"
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
// Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat,
|
|
6
6
|
// rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported.
|
|
7
7
|
|
|
8
|
-
// VERSION: 2026-07-
|
|
9
|
-
// COMMIT:
|
|
8
|
+
// VERSION: 2026-07-23_18-24-27_UTC
|
|
9
|
+
// COMMIT: 93b4eb174b2da9ee3f6effc363b579a96a65c93a
|
|
10
10
|
|
|
11
11
|
// Instructions on pulling and using this list can be found at https://publicsuffix.org/list/.
|
|
12
12
|
|
|
@@ -12918,11 +12918,6 @@ deployagent.space
|
|
|
12918
12918
|
// Submitted by Peter Thomassen <peter@desec.io>
|
|
12919
12919
|
dedyn.io
|
|
12920
12920
|
|
|
12921
|
-
// Deta : https://www.deta.sh/
|
|
12922
|
-
// Submitted by Aavash Shrestha <aavash@deta.sh>
|
|
12923
|
-
deta.app
|
|
12924
|
-
deta.dev
|
|
12925
|
-
|
|
12926
12921
|
// Deuxfleurs : https://deuxfleurs.fr
|
|
12927
12922
|
// Submitted by Aeddis Desauw <ca@deuxfleurs.fr>
|
|
12928
12923
|
deuxfleurs.eu
|
|
@@ -15210,6 +15205,10 @@ us.platform.sh
|
|
|
15210
15205
|
*.platformsh.site
|
|
15211
15206
|
*.tst.site
|
|
15212
15207
|
|
|
15208
|
+
// Playcode : https://playcode.io
|
|
15209
|
+
// Submitted by Ruslan Ianberdin <security@playcode.io>
|
|
15210
|
+
playcode.site
|
|
15211
|
+
|
|
15213
15212
|
// Pley AB : https://www.pley.com/
|
|
15214
15213
|
// Submitted by Henning Pohl <infra@pley.com>
|
|
15215
15214
|
pley.games
|