@blamejs/core 0.8.72 → 0.8.77

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.
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ /**
3
+ * @module b.nistCrosswalk
4
+ * @nav Audit & Compliance
5
+ * @title NIST control crosswalk
6
+ * @order 150
7
+ * @slug nist-crosswalk
8
+ *
9
+ * @intro
10
+ * Crosswalk catalog mapping NIST control IDs — SP 800-53 Rev 5 (federal
11
+ * systems), NIST CSF 2.0 (cyber risk management), SP 800-171 Rev 3
12
+ * (CUI / non-federal), and SP 800-218 SSDF (secure software development)
13
+ * — to the framework primitives that satisfy them. Used by operators
14
+ * producing System Security Plans (SSPs), POAMs, ATO packages, or
15
+ * CMMC self-assessments to show evidence-of-control coverage at the
16
+ * primitive level.
17
+ *
18
+ * The catalog is intentionally NOT exhaustive — controls that are
19
+ * purely organizational (e.g. PS-1 Personnel Security Policy) or
20
+ * purely physical (e.g. PE-3 Physical Access Control) are absent;
21
+ * only controls a framework can demonstrably help an operator meet
22
+ * are mapped.
23
+ *
24
+ * @card
25
+ * Maps NIST 800-53 Rev 5, CSF 2.0, 800-171 Rev 3, and 800-218 SSDF
26
+ * control IDs to framework primitives so operators can show
27
+ * evidence-of-control at the SSP / ATO level.
28
+ */
29
+
30
+ var framework_error = require("./framework-error");
31
+ var validateOpts = require("./validate-opts");
32
+
33
+ var NistCrosswalkError = framework_error.defineClass(
34
+ "NistCrosswalkError",
35
+ "nist-crosswalk"
36
+ );
37
+
38
+ // Catalog shape:
39
+ // { catalog: "800-53r5" | "csf-2.0" | "800-171r3" | "800-218",
40
+ // controls: { <id>: { name, family, primitives: [...], notes? } } }
41
+ //
42
+ // `primitives` lists the framework `b.X` paths that satisfy the control;
43
+ // operators reproduce this evidence in their SSP.
44
+ var CATALOGS = {
45
+ "800-53r5": {
46
+ family: "NIST SP 800-53 Rev 5 (Security and Privacy Controls for Information Systems and Organizations)",
47
+ controls: {
48
+ "AC-2": { name: "Account Management", primitives: ["b.session", "b.auth.password", "b.permissions", "b.auth.lockout"] },
49
+ "AC-3": { name: "Access Enforcement", primitives: ["b.permissions", "b.middleware.requireAuth", "b.middleware.requireAal", "b.middleware.requireStepUp"] },
50
+ "AC-4": { name: "Information Flow Enforcement", primitives: ["b.middleware.cors", "b.ssrfGuard", "b.httpClient.allowedHosts", "b.middleware.networkAllowlist"] },
51
+ "AC-5": { name: "Separation of Duties", primitives: ["b.dualControl", "b.ddlChangeControl", "b.audit.assertSegregation"] },
52
+ "AC-6": { name: "Least Privilege", primitives: ["b.permissions", "b.middleware.dbRoleFor", "b.mcp.capability"] },
53
+ "AC-7": { name: "Unsuccessful Logon Attempts", primitives: ["b.auth.lockout", "b.authBotChallenge"] },
54
+ "AC-12": { name: "Session Termination", primitives: ["b.session", "b.atoKillSwitch"] },
55
+ "AC-17": { name: "Remote Access", primitives: ["b.middleware.requireAuth", "b.mtlsCa", "b.network.tls"] },
56
+ "AC-25": { name: "Reference Monitor", primitives: ["b.permissions", "b.middleware.requireAuth", "b.middleware.bearerAuth"] },
57
+ "AU-2": { name: "Event Logging", primitives: ["b.audit", "b.observability"] },
58
+ "AU-3": { name: "Content of Audit Records", primitives: ["b.audit", "b.fda21cfr11"] },
59
+ "AU-4": { name: "Audit Log Storage Capacity", primitives: ["b.audit", "b.logStream"] },
60
+ "AU-6": { name: "Audit Record Review, Analysis, and Reporting", primitives: ["b.auditDailyReview"] },
61
+ "AU-9": { name: "Protection of Audit Information", primitives: ["b.audit", "b.audit.signCheckpoint", "b.configDrift"] },
62
+ "AU-10": { name: "Non-repudiation", primitives: ["b.audit.signCheckpoint", "b.webhook.sign", "b.crypto.httpSig"] },
63
+ "AU-12": { name: "Audit Record Generation", primitives: ["b.audit", "b.audit.safeEmit"] },
64
+ "AU-14": { name: "Session Audit", primitives: ["b.audit", "b.session"] },
65
+ "CA-7": { name: "Continuous Monitoring", primitives: ["b.configDrift", "b.honeytoken", "b.audit"] },
66
+ "CM-2": { name: "Baseline Configuration", primitives: ["b.configDrift", "b.configDrift.verifyVendorIntegrity"] },
67
+ "CM-3": { name: "Configuration Change Control", primitives: ["b.ddlChangeControl", "b.dualControl"] },
68
+ "CM-5": { name: "Access Restrictions for Change", primitives: ["b.ddlChangeControl", "b.dualControl", "b.permissions"] },
69
+ "CM-7": { name: "Least Functionality", primitives: ["b.processSpawn", "b.sandbox", "b.middleware.networkAllowlist"] },
70
+ "CP-9": { name: "System Backup", primitives: ["b.backup", "b.backup.scheduleTest", "b.backupBundle.verifyManifestSignature"] },
71
+ "CP-10": { name: "System Recovery and Reconstitution", primitives: ["b.restore", "b.restore.rollback", "b.drRunbook"] },
72
+ "IA-2": { name: "Identification and Authentication (Organizational Users)", primitives: ["b.auth.password", "b.auth.passkey", "b.auth.totp", "b.session"] },
73
+ "IA-3": { name: "Device Identification and Authentication", primitives: ["b.mtlsCa", "b.sessionDeviceBinding", "b.auth.dpop"] },
74
+ "IA-4": { name: "Identifier Management", primitives: ["b.auth", "b.apiKey"] },
75
+ "IA-5": { name: "Authenticator Management", primitives: ["b.auth.password", "b.auth.password.policy", "b.apiKey"] },
76
+ "IA-8": { name: "Identification and Authentication (Non-Organizational Users)", primitives: ["b.auth.oauth", "b.auth.saml", "b.auth.openidFederation"] },
77
+ "IA-11": { name: "Re-authentication", primitives: ["b.auth.stepUp", "b.middleware.requireStepUp"] },
78
+ "IA-12": { name: "Identity Proofing", primitives: ["b.auth.aal"] },
79
+ "IR-4": { name: "Incident Handling", primitives: ["b.incident", "b.incident.report", "b.atoKillSwitch"] },
80
+ "IR-5": { name: "Incident Monitoring", primitives: ["b.honeytoken", "b.auditDailyReview"] },
81
+ "IR-6": { name: "Incident Reporting", primitives: ["b.dora", "b.nis2", "b.cra", "b.secCyber", "b.breach.deadline"] },
82
+ "IR-8": { name: "Incident Response Plan", primitives: ["b.drRunbook", "b.incident"] },
83
+ "MP-6": { name: "Media Sanitization", primitives: ["b.cryptoField.eraseRow", "b.db.eraseHard", "b.subject.eraseHard"] },
84
+ "RA-5": { name: "Vulnerability Monitoring and Scanning", primitives: ["b.configDrift.verifyVendorIntegrity"] },
85
+ "SA-15": { name: "Development Process, Standards, and Tools", primitives: ["b.audit", "b.configDrift"] },
86
+ "SC-2": { name: "Separation of System and User Functionality", primitives: ["b.sandbox", "b.processSpawn"] },
87
+ "SC-7": { name: "Boundary Protection", primitives: ["b.ssrfGuard", "b.middleware.cors", "b.middleware.networkAllowlist", "b.httpClient.allowedHosts"] },
88
+ "SC-8": { name: "Transmission Confidentiality and Integrity", primitives: ["b.network.tls", "b.crypto", "b.crypto.httpSig"] },
89
+ "SC-12": { name: "Cryptographic Key Establishment and Management", primitives: ["b.vault", "b.crypto", "b.crypto.hpke"] },
90
+ "SC-13": { name: "Cryptographic Protection", primitives: ["b.crypto", "b.vault", "b.cryptoField", "b.network.tls"] },
91
+ "SC-17": { name: "Public Key Infrastructure Certificates", primitives: ["b.mtlsCa", "b.acme", "b.network.tls.ct"] },
92
+ "SC-23": { name: "Session Authenticity", primitives: ["b.session", "b.tlsExporter"] },
93
+ "SC-28": { name: "Protection of Information at Rest", primitives: ["b.vault", "b.cryptoField", "b.cryptoField.declarePerRowKey"] },
94
+ "SI-2": { name: "Flaw Remediation", primitives: ["b.configDrift", "b.configDrift.verifyVendorIntegrity"] },
95
+ "SI-3": { name: "Malicious Code Protection", primitives: ["b.guardAll", "b.fileType", "b.honeytoken"] },
96
+ "SI-4": { name: "System Monitoring", primitives: ["b.audit", "b.metrics", "b.tracing", "b.honeytoken"] },
97
+ "SI-7": { name: "Software, Firmware, and Information Integrity", primitives: ["b.configDrift.verifyVendorIntegrity", "b.audit.signCheckpoint"] },
98
+ "SI-10": { name: "Information Input Validation", primitives: ["b.safeJson", "b.safeUrl", "b.guardAll", "b.middleware.bodyParser"] },
99
+ "SI-11": { name: "Error Handling", primitives: ["b.errorPage", "b.middleware.errorHandler"] },
100
+ "SI-12": { name: "Information Management and Retention", primitives: ["b.retention", "b.legalHold"] },
101
+ "SR-3": { name: "Supply Chain Controls and Processes", primitives: ["b.configDrift.verifyVendorIntegrity"] },
102
+ "SR-4": { name: "Provenance", primitives: ["b.configDrift.verifyVendorIntegrity"] },
103
+ "SR-11": { name: "Component Authenticity", primitives: ["b.configDrift.verifyVendorIntegrity"] },
104
+ },
105
+ },
106
+ "csf-2.0": {
107
+ family: "NIST Cybersecurity Framework 2.0 (Feb 2024)",
108
+ controls: {
109
+ "GV.OC": { name: "Organizational Context", primitives: ["b.compliance"] },
110
+ "GV.RM": { name: "Risk Management Strategy", primitives: ["b.compliance", "b.dora", "b.cra"] },
111
+ "GV.RR": { name: "Roles, Responsibilities, and Authorities", primitives: ["b.permissions", "b.audit.bindActor", "b.dualControl"] },
112
+ "GV.PO": { name: "Policy", primitives: ["b.compliance"] },
113
+ "GV.OV": { name: "Oversight", primitives: ["b.audit", "b.auditDailyReview"] },
114
+ "GV.SC": { name: "Cybersecurity Supply Chain Risk Management", primitives: ["b.configDrift.verifyVendorIntegrity"] },
115
+ "ID.AM": { name: "Asset Management", primitives: ["b.configDrift"] },
116
+ "ID.RA": { name: "Risk Assessment", primitives: ["b.compliance"] },
117
+ "ID.IM": { name: "Improvement", primitives: ["b.audit", "b.honeytoken"] },
118
+ "PR.AA": { name: "Identity Management, Authentication, and Access Control", primitives: ["b.session", "b.auth", "b.permissions"] },
119
+ "PR.AT": { name: "Awareness and Training", primitives: [] },
120
+ "PR.DS": { name: "Data Security", primitives: ["b.vault", "b.cryptoField", "b.network.tls", "b.crypto"] },
121
+ "PR.PS": { name: "Platform Security", primitives: ["b.middleware.securityHeaders", "b.sandbox", "b.processSpawn"] },
122
+ "PR.IR": { name: "Technology Infrastructure Resilience", primitives: ["b.cluster", "b.scheduler", "b.retry"] },
123
+ "DE.CM": { name: "Continuous Monitoring", primitives: ["b.audit", "b.metrics", "b.honeytoken", "b.configDrift"] },
124
+ "DE.AE": { name: "Adverse Event Analysis", primitives: ["b.auditDailyReview", "b.honeytoken"] },
125
+ "RS.MA": { name: "Incident Management", primitives: ["b.incident"] },
126
+ "RS.AN": { name: "Incident Analysis", primitives: ["b.auditTools.forensicSnapshot"] },
127
+ "RS.CO": { name: "Incident Response Reporting and Communication", primitives: ["b.dora", "b.nis2", "b.cra", "b.secCyber", "b.breach.deadline"] },
128
+ "RS.MI": { name: "Incident Mitigation", primitives: ["b.atoKillSwitch"] },
129
+ "RC.RP": { name: "Incident Recovery Plan Execution", primitives: ["b.restore", "b.restore.rollback", "b.drRunbook"] },
130
+ "RC.CO": { name: "Incident Recovery Communication", primitives: ["b.dora", "b.nis2"] },
131
+ },
132
+ },
133
+ "800-171r3": {
134
+ family: "NIST SP 800-171 Rev 3 (CUI Protection)",
135
+ controls: {
136
+ "03.01.01": { name: "Account Management", primitives: ["b.session", "b.auth.password", "b.permissions"] },
137
+ "03.01.02": { name: "Access Enforcement", primitives: ["b.permissions", "b.middleware.requireAuth"] },
138
+ "03.01.03": { name: "Information Flow Enforcement", primitives: ["b.ssrfGuard", "b.middleware.cors", "b.middleware.networkAllowlist"] },
139
+ "03.01.04": { name: "Separation of Duties", primitives: ["b.dualControl", "b.ddlChangeControl"] },
140
+ "03.01.05": { name: "Least Privilege", primitives: ["b.permissions", "b.middleware.dbRoleFor"] },
141
+ "03.01.07": { name: "Privileged Functions", primitives: ["b.breakGlass", "b.dualControl"] },
142
+ "03.01.08": { name: "Unsuccessful Logon Attempts", primitives: ["b.auth.lockout"] },
143
+ "03.01.10": { name: "Session Lock + Termination", primitives: ["b.session"] },
144
+ "03.03.01": { name: "Event Logging", primitives: ["b.audit"] },
145
+ "03.03.02": { name: "Audit Log Contents", primitives: ["b.audit", "b.fda21cfr11"] },
146
+ "03.03.05": { name: "Audit Log Reduction + Reporting", primitives: ["b.auditDailyReview"] },
147
+ "03.03.08": { name: "Audit Log Protection", primitives: ["b.audit.signCheckpoint"] },
148
+ "03.04.01": { name: "Baseline Configuration", primitives: ["b.configDrift"] },
149
+ "03.04.02": { name: "Configuration Settings", primitives: ["b.middleware.securityHeaders", "b.compliance"] },
150
+ "03.05.01": { name: "User Identification + Authentication", primitives: ["b.auth.password", "b.auth.passkey", "b.session"] },
151
+ "03.05.05": { name: "Device Identification + Authentication", primitives: ["b.mtlsCa", "b.sessionDeviceBinding"] },
152
+ "03.05.07": { name: "Authenticator Management", primitives: ["b.auth.password.policy"] },
153
+ "03.06.01": { name: "Incident Handling", primitives: ["b.incident"] },
154
+ "03.06.02": { name: "Incident Monitoring", primitives: ["b.honeytoken", "b.auditDailyReview"] },
155
+ "03.06.03": { name: "Incident Reporting", primitives: ["b.incident.report", "b.breach.deadline"] },
156
+ "03.08.03": { name: "Media Sanitization", primitives: ["b.cryptoField.eraseRow", "b.db.eraseHard"] },
157
+ "03.13.01": { name: "Boundary Protection", primitives: ["b.ssrfGuard", "b.middleware.networkAllowlist"] },
158
+ "03.13.02": { name: "Network + Application Protection", primitives: ["b.middleware.securityHeaders", "b.middleware.cors"] },
159
+ "03.13.08": { name: "Transmission Confidentiality + Integrity", primitives: ["b.network.tls", "b.crypto"] },
160
+ "03.13.11": { name: "Cryptographic Protection", primitives: ["b.crypto", "b.vault", "b.cryptoField"] },
161
+ "03.14.01": { name: "Flaw Remediation", primitives: ["b.configDrift.verifyVendorIntegrity"] },
162
+ "03.14.06": { name: "System Monitoring", primitives: ["b.audit", "b.metrics", "b.honeytoken"] },
163
+ },
164
+ },
165
+ "800-218": {
166
+ family: "NIST SP 800-218 (Secure Software Development Framework v1.1)",
167
+ controls: {
168
+ "PO.1": { name: "Prepare the Organization — Software Development Security", primitives: ["b.security.assertProduction"] },
169
+ "PO.3": { name: "Implement Supporting Toolchains", primitives: ["b.configDrift"] },
170
+ "PO.5": { name: "Implement and Maintain Secure Environments", primitives: ["b.security.assertProduction", "b.compliance"] },
171
+ "PS.1": { name: "Protect All Forms of Code from Unauthorized Access and Tampering", primitives: ["b.configDrift.verifyVendorIntegrity"] },
172
+ "PS.3": { name: "Archive and Protect Each Software Release", primitives: [] },
173
+ "PW.1": { name: "Design Software to Meet Security Requirements", primitives: ["b.compliance"] },
174
+ "PW.4": { name: "Reuse Existing, Well-Secured Software", primitives: ["b.configDrift.verifyVendorIntegrity"] },
175
+ "PW.5": { name: "Create Source Code Adhering to Secure Coding Practices", primitives: [] },
176
+ "PW.6": { name: "Configure the Compilation, Interpreter, and Build Processes to Improve Executable Security", primitives: ["b.configDrift"] },
177
+ "PW.7": { name: "Review and/or Analyze Human-Readable Code to Identify Vulnerabilities", primitives: [] },
178
+ "PW.8": { name: "Test Executable Code to Identify Vulnerabilities", primitives: [] },
179
+ "PW.9": { name: "Configure Software to Have Secure Settings by Default", primitives: ["b.middleware.securityHeaders", "b.compliance"] },
180
+ "RV.1": { name: "Identify and Confirm Vulnerabilities on an Ongoing Basis", primitives: [] },
181
+ "RV.2": { name: "Assess, Prioritize, and Remediate Vulnerabilities", primitives: [] },
182
+ "RV.3": { name: "Analyze Vulnerabilities to Identify Their Root Causes", primitives: ["b.auditTools.forensicSnapshot"] },
183
+ },
184
+ },
185
+ };
186
+
187
+ /**
188
+ * @primitive b.nistCrosswalk.controls
189
+ * @signature b.nistCrosswalk.controls(catalog)
190
+ * @since 0.8.77
191
+ * @related b.nistCrosswalk.coverage
192
+ *
193
+ * Returns the control catalog map for one of: `800-53r5`, `csf-2.0`,
194
+ * `800-171r3`, `800-218`.
195
+ *
196
+ * @example
197
+ * var sp80053 = b.nistCrosswalk.controls("800-53r5");
198
+ * console.log(sp80053["AC-3"].primitives);
199
+ * // → ["b.permissions", "b.middleware.requireAuth", ...]
200
+ */
201
+ function controls(catalog) {
202
+ if (typeof catalog !== "string" || !CATALOGS[catalog]) {
203
+ throw new NistCrosswalkError("nist-crosswalk/unknown-catalog",
204
+ "controls: unknown catalog '" + catalog + "'. Known: " +
205
+ Object.keys(CATALOGS).join(", "));
206
+ }
207
+ return CATALOGS[catalog].controls;
208
+ }
209
+
210
+ /**
211
+ * @primitive b.nistCrosswalk.coverage
212
+ * @signature b.nistCrosswalk.coverage(opts)
213
+ * @since 0.8.77
214
+ *
215
+ * Given a list of control IDs the operator's SSP claims to satisfy,
216
+ * returns `{ covered, uncovered, primitives }` — `covered` lists the
217
+ * IDs in the catalog with at least one mapped primitive, `uncovered`
218
+ * lists IDs with no mapping, `primitives` is the deduplicated set of
219
+ * framework primitives evidencing coverage. Use the output to bind
220
+ * SSP control descriptions to specific framework callouts.
221
+ *
222
+ * @opts
223
+ * {
224
+ * catalog: "800-53r5" | "csf-2.0" | "800-171r3" | "800-218",
225
+ * controlIds: string[],
226
+ * }
227
+ *
228
+ * @example
229
+ * var rv = b.nistCrosswalk.coverage({
230
+ * catalog: "800-53r5",
231
+ * controlIds: ["AC-2", "AC-3", "AC-99-fake"],
232
+ * });
233
+ * // rv.covered → ["AC-2", "AC-3"]
234
+ * // rv.uncovered → ["AC-99-fake"]
235
+ * // rv.primitives → ["b.session", "b.auth.password", "b.permissions", ...]
236
+ */
237
+ function coverage(opts) {
238
+ validateOpts.requireObject(opts, "nistCrosswalk.coverage",
239
+ NistCrosswalkError, "nist-crosswalk/bad-opts");
240
+ if (!Array.isArray(opts.controlIds)) {
241
+ throw new NistCrosswalkError("nist-crosswalk/bad-control-ids",
242
+ "coverage: opts.controlIds must be an array");
243
+ }
244
+ var cat = controls(opts.catalog);
245
+ var covered = [];
246
+ var uncovered = [];
247
+ var prims = new Set();
248
+ opts.controlIds.forEach(function (id) {
249
+ var entry = cat[id];
250
+ if (entry && Array.isArray(entry.primitives) && entry.primitives.length > 0) {
251
+ covered.push(id);
252
+ entry.primitives.forEach(function (p) { prims.add(p); });
253
+ } else {
254
+ uncovered.push(id);
255
+ }
256
+ });
257
+ return {
258
+ catalog: opts.catalog,
259
+ covered: covered,
260
+ uncovered: uncovered,
261
+ primitives: Array.from(prims).sort(),
262
+ };
263
+ }
264
+
265
+ /**
266
+ * @primitive b.nistCrosswalk.listCatalogs
267
+ * @signature b.nistCrosswalk.listCatalogs()
268
+ * @since 0.8.77
269
+ *
270
+ * Returns `[{ id, family, count }]` — the catalogs known to the
271
+ * crosswalk + how many control IDs are mapped in each.
272
+ *
273
+ * @example
274
+ * b.nistCrosswalk.listCatalogs();
275
+ * // → [{ id: "800-53r5", family: "...", count: 50 }, ...]
276
+ */
277
+ function listCatalogs() {
278
+ return Object.keys(CATALOGS).map(function (id) {
279
+ var cat = CATALOGS[id];
280
+ return {
281
+ id: id,
282
+ family: cat.family,
283
+ count: Object.keys(cat.controls).length,
284
+ };
285
+ });
286
+ }
287
+
288
+ module.exports = {
289
+ controls: controls,
290
+ coverage: coverage,
291
+ listCatalogs: listCatalogs,
292
+ NistCrosswalkError: NistCrosswalkError,
293
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blamejs/core",
3
- "version": "0.8.72",
3
+ "version": "0.8.77",
4
4
  "description": "The Node framework that owns its stack.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "blamejs contributors",
@@ -66,11 +66,11 @@
66
66
  "MIGRATING.md",
67
67
  "NOTICE",
68
68
  "README.md",
69
- "sbom.cyclonedx.json"
69
+ "sbom.cdx.json"
70
70
  ],
71
71
  "scripts": {
72
72
  "test": "node test/smoke.js",
73
- "fuzz": "node fuzz/_run-all.js",
73
+ "fuzz": "npx --yes @jazzer.js/core fuzz/safe-json.fuzz.js -- -max_total_time=60",
74
74
  "prepack": "node scripts/check-pack-against-gitignore.js",
75
75
  "check:vendor-currency": "node scripts/check-vendor-currency.js"
76
76
  },
@@ -2,10 +2,10 @@
2
2
  "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json",
3
3
  "bomFormat": "CycloneDX",
4
4
  "specVersion": "1.6",
5
- "serialNumber": "urn:uuid:2ace0ce8-c004-4329-8eed-0ae3c1fb02a6",
5
+ "serialNumber": "urn:uuid:79aca7e8-bd02-4734-9f45-a9f7c2f0d9cf",
6
6
  "version": 1,
7
7
  "metadata": {
8
- "timestamp": "2026-05-10T19:52:07.485Z",
8
+ "timestamp": "2026-05-11T03:18:04.991Z",
9
9
  "lifecycles": [
10
10
  {
11
11
  "phase": "build"
@@ -19,14 +19,14 @@
19
19
  }
20
20
  ],
21
21
  "component": {
22
- "bom-ref": "@blamejs/core@0.8.72",
22
+ "bom-ref": "@blamejs/core@0.8.77",
23
23
  "type": "library",
24
24
  "name": "blamejs",
25
- "version": "0.8.72",
25
+ "version": "0.8.77",
26
26
  "scope": "required",
27
27
  "author": "blamejs contributors",
28
28
  "description": "The Node framework that owns its stack.",
29
- "purl": "pkg:npm/%40blamejs/core@0.8.72",
29
+ "purl": "pkg:npm/%40blamejs/core@0.8.77",
30
30
  "properties": [],
31
31
  "externalReferences": [
32
32
  {
@@ -54,7 +54,7 @@
54
54
  "components": [],
55
55
  "dependencies": [
56
56
  {
57
- "ref": "@blamejs/core@0.8.72",
57
+ "ref": "@blamejs/core@0.8.77",
58
58
  "dependsOn": []
59
59
  }
60
60
  ]