@blamejs/blamejs-shop 0.2.12 → 0.2.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/README.md +1 -1
- package/lib/admin.js +616 -21
- package/lib/asset-manifest.json +5 -5
- package/lib/catalog.js +19 -0
- package/lib/storefront.js +1 -1
- package/lib/vendor/MANIFEST.json +3 -3
- package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +71 -23
- package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +2 -0
- package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +2 -0
- package/lib/vendor/blamejs/.github/workflows/ci.yml +17 -0
- package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +18 -10
- package/lib/vendor/blamejs/.github/workflows/release-container.yml +29 -16
- package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +22 -3
- package/lib/vendor/blamejs/.github/zizmor.yml +29 -0
- package/lib/vendor/blamejs/.pinact.yaml +24 -8
- package/lib/vendor/blamejs/CHANGELOG.md +20 -0
- package/lib/vendor/blamejs/api-snapshot.json +6 -2
- package/lib/vendor/blamejs/lib/agent-idempotency.js +50 -10
- package/lib/vendor/blamejs/lib/agent-orchestrator.js +58 -5
- package/lib/vendor/blamejs/lib/agent-saga.js +8 -4
- package/lib/vendor/blamejs/lib/agent-tenant.js +56 -4
- package/lib/vendor/blamejs/lib/agent-trace.js +4 -3
- package/lib/vendor/blamejs/lib/ai-adverse-decision.js +1 -1
- package/lib/vendor/blamejs/lib/archive-wrap.js +1 -1
- package/lib/vendor/blamejs/lib/audit-daily-review.js +3 -3
- package/lib/vendor/blamejs/lib/audit.js +11 -8
- package/lib/vendor/blamejs/lib/auth/jwt.js +7 -4
- package/lib/vendor/blamejs/lib/auth/saml.js +2 -2
- package/lib/vendor/blamejs/lib/calendar.js +14 -10
- package/lib/vendor/blamejs/lib/circuit-breaker.js +6 -4
- package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +2 -2
- package/lib/vendor/blamejs/lib/compliance.js +7 -9
- package/lib/vendor/blamejs/lib/cookies.js +2 -2
- package/lib/vendor/blamejs/lib/cose.js +1 -1
- package/lib/vendor/blamejs/lib/crypto-field.js +8 -3
- package/lib/vendor/blamejs/lib/data-act.js +4 -3
- package/lib/vendor/blamejs/lib/did.js +1 -1
- package/lib/vendor/blamejs/lib/file-upload.js +18 -1
- package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
- package/lib/vendor/blamejs/lib/guard-auth.js +5 -5
- package/lib/vendor/blamejs/lib/guard-cidr.js +4 -4
- package/lib/vendor/blamejs/lib/guard-csv.js +6 -6
- package/lib/vendor/blamejs/lib/guard-domain.js +4 -4
- package/lib/vendor/blamejs/lib/guard-email.js +6 -5
- package/lib/vendor/blamejs/lib/guard-filename.js +4 -4
- package/lib/vendor/blamejs/lib/guard-graphql.js +5 -5
- package/lib/vendor/blamejs/lib/guard-html.js +2 -2
- package/lib/vendor/blamejs/lib/guard-image.js +1 -1
- package/lib/vendor/blamejs/lib/guard-json.js +5 -5
- package/lib/vendor/blamejs/lib/guard-jsonpath.js +4 -4
- package/lib/vendor/blamejs/lib/guard-jwt.js +5 -5
- package/lib/vendor/blamejs/lib/guard-markdown.js +6 -6
- package/lib/vendor/blamejs/lib/guard-mime.js +6 -6
- package/lib/vendor/blamejs/lib/guard-oauth.js +5 -5
- package/lib/vendor/blamejs/lib/guard-pdf.js +1 -1
- package/lib/vendor/blamejs/lib/guard-regex.js +4 -4
- package/lib/vendor/blamejs/lib/guard-shell.js +4 -4
- package/lib/vendor/blamejs/lib/guard-svg.js +5 -5
- package/lib/vendor/blamejs/lib/guard-template.js +4 -4
- package/lib/vendor/blamejs/lib/guard-time.js +6 -6
- package/lib/vendor/blamejs/lib/guard-uuid.js +6 -6
- package/lib/vendor/blamejs/lib/guard-xml.js +4 -4
- package/lib/vendor/blamejs/lib/guard-yaml.js +5 -5
- package/lib/vendor/blamejs/lib/link-header.js +3 -2
- package/lib/vendor/blamejs/lib/mail-agent.js +4 -2
- package/lib/vendor/blamejs/lib/mail-bimi.js +3 -2
- package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +7 -11
- package/lib/vendor/blamejs/lib/mail-crypto-smime.js +6 -5
- package/lib/vendor/blamejs/lib/mail-crypto.js +5 -5
- package/lib/vendor/blamejs/lib/mail-store.js +3 -2
- package/lib/vendor/blamejs/lib/mcp.js +2 -3
- package/lib/vendor/blamejs/lib/middleware/age-gate.js +10 -6
- package/lib/vendor/blamejs/lib/middleware/ai-act-disclosure.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/api-encrypt.js +3 -3
- package/lib/vendor/blamejs/lib/middleware/compose-pipeline.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/csp-nonce.js +2 -2
- package/lib/vendor/blamejs/lib/middleware/flag-context.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/rate-limit.js +2 -2
- package/lib/vendor/blamejs/lib/middleware/require-auth.js +2 -1
- package/lib/vendor/blamejs/lib/queue-redis.js +9 -0
- package/lib/vendor/blamejs/lib/queue.js +17 -1
- package/lib/vendor/blamejs/lib/retry.js +26 -0
- package/lib/vendor/blamejs/lib/router.js +4 -1
- package/lib/vendor/blamejs/lib/safe-decompress.js +3 -2
- package/lib/vendor/blamejs/lib/safe-icap.js +3 -2
- package/lib/vendor/blamejs/lib/safe-mime.js +1 -1
- package/lib/vendor/blamejs/lib/safe-smtp.js +1 -1
- package/lib/vendor/blamejs/lib/sec-cyber.js +1 -1
- package/lib/vendor/blamejs/lib/storage.js +20 -16
- package/lib/vendor/blamejs/lib/tsa.js +2 -1
- package/lib/vendor/blamejs/lib/vault/index.js +1 -0
- package/lib/vendor/blamejs/lib/vault-aad.js +2 -2
- package/lib/vendor/blamejs/package.json +1 -1
- package/lib/vendor/blamejs/release-notes/v0.13.23.json +42 -0
- package/lib/vendor/blamejs/release-notes/v0.13.24.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.13.25.json +39 -0
- package/lib/vendor/blamejs/release-notes/v0.13.26.json +31 -0
- package/lib/vendor/blamejs/release-notes/v0.13.27.json +34 -0
- package/lib/vendor/blamejs/release-notes/v0.13.28.json +30 -0
- package/lib/vendor/blamejs/release-notes/v0.13.29.json +30 -0
- package/lib/vendor/blamejs/release-notes/v0.13.30.json +30 -0
- package/lib/vendor/blamejs/release-notes/v0.13.31.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.13.32.json +34 -0
- package/lib/vendor/blamejs/test/20-db.js +30 -0
- package/lib/vendor/blamejs/test/integration/queue-redis.test.js +14 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +37 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-orchestrator.test.js +37 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-tenant.test.js +26 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-daily-review.test.js +9 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retry.test.js +25 -0
- package/lib/vendor/blamejs/test/smoke.js +25 -0
- package/package.json +1 -1
|
@@ -107,8 +107,9 @@ var MAX_EXPAND_SPAN_MS = 10 * 365 * 24 * 60 * 60 * 1000;
|
|
|
107
107
|
* @since 0.11.31
|
|
108
108
|
* @status stable
|
|
109
109
|
*
|
|
110
|
-
* Validate a JSCalendar Event / Task object's
|
|
111
|
-
* RFC 8984 §5 (Event)
|
|
110
|
+
* Validate a JSCalendar Event / Task / Note / Group object's
|
|
111
|
+
* required-field shape per RFC 8984 §5 (Event) / §6 (Task) / §7 (Note) /
|
|
112
|
+
* §1.4.4 (Group). Returns the input on success; throws
|
|
112
113
|
* `CalendarError` on refusal with a `.code` naming the specific shape
|
|
113
114
|
* rule that failed.
|
|
114
115
|
*
|
|
@@ -337,10 +338,11 @@ function validate(jsCal) {
|
|
|
337
338
|
* @since 0.11.31
|
|
338
339
|
* @status stable
|
|
339
340
|
*
|
|
340
|
-
* Parse iCalendar text (RFC 5545) via `b.safeIcal.parse` and map
|
|
341
|
-
*
|
|
342
|
-
* a single
|
|
343
|
-
* an array
|
|
341
|
+
* Parse iCalendar text (RFC 5545) via `b.safeIcal.parse` and map each
|
|
342
|
+
* VEVENT → JSCalendar Event, VTODO → Task, and VJOURNAL → Note
|
|
343
|
+
* (RFC 8984 §5 / §6 / §7). Returns a single object when the VCALENDAR
|
|
344
|
+
* holds exactly one component, or an array across all components when
|
|
345
|
+
* there are several.
|
|
344
346
|
*
|
|
345
347
|
* @opts
|
|
346
348
|
* safeIcalOpts: object, // forwarded to b.safeIcal.parse (caps, allowExperimental, etc.)
|
|
@@ -381,10 +383,12 @@ function fromIcal(text, opts) {
|
|
|
381
383
|
* @since 0.11.31
|
|
382
384
|
* @status stable
|
|
383
385
|
*
|
|
384
|
-
* Render a JSCalendar
|
|
385
|
-
*
|
|
386
|
-
*
|
|
387
|
-
*
|
|
386
|
+
* Render a JSCalendar object back to RFC 5545 iCalendar text — Event →
|
|
387
|
+
* VEVENT, Task → VTODO, Note → VJOURNAL, and a Group to a VCALENDAR
|
|
388
|
+
* carrying each member component. Returns a CRLF-terminated string
|
|
389
|
+
* wrapped in a `BEGIN:VCALENDAR / VERSION:2.0 /
|
|
390
|
+
* PRODID:-//blamejs//Calendar//EN / … / END:VCALENDAR` envelope per
|
|
391
|
+
* RFC 5545 §3.4.
|
|
388
392
|
*
|
|
389
393
|
* @opts
|
|
390
394
|
* prodid: string, // PRODID value to emit; default "-//blamejs//Calendar//EN"
|
|
@@ -36,8 +36,10 @@ var retryHelper = require("./retry");
|
|
|
36
36
|
* Build a circuit-breaker. Returns a CircuitBreaker instance with
|
|
37
37
|
* `wrap(fn)` (executes `fn` if the breaker is closed; throws an
|
|
38
38
|
* `Error` with `code: "CIRCUIT_OPEN"` + `isObjectStoreError: true` +
|
|
39
|
-
* `permanent: false` when open), `
|
|
40
|
-
* `onStateChange(handler)` listener registration
|
|
39
|
+
* `permanent: false` when open), `getState()`, `reset()`, and
|
|
40
|
+
* `onStateChange(handler)` listener registration (the handler, and the
|
|
41
|
+
* `onStateChange` opt, receive `{ name, from, to, at }` on every
|
|
42
|
+
* transition). Pass-through
|
|
41
43
|
* factory: identical instance shape to `b.retry.CircuitBreaker`,
|
|
42
44
|
* with the framework's `create(opts)` vocabulary.
|
|
43
45
|
*
|
|
@@ -53,8 +55,8 @@ var retryHelper = require("./retry");
|
|
|
53
55
|
* failureThreshold: number, // failures in the closed state before opening
|
|
54
56
|
* cooldownMs: number, // milliseconds the breaker stays open before probing
|
|
55
57
|
* successThreshold: number, // probe successes required to close from half-open
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
+
* onStateChange: Function, // ({ name, from, to, at }) → void; also emits the
|
|
59
|
+
* // `breaker.state.change` observability event
|
|
58
60
|
*
|
|
59
61
|
* @example
|
|
60
62
|
* var cb = b.circuitBreaker.create({
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
* The framework provides:
|
|
32
32
|
*
|
|
33
33
|
* - banner({ kind }) → builder for the standard disclosure banner
|
|
34
|
-
* - watermark({
|
|
35
|
-
* -
|
|
34
|
+
* - watermark({ mediaKind, ... }) → builder for content-marking tags
|
|
35
|
+
* - metaTags({ ... }) → meta tag pair for HTML pages
|
|
36
36
|
* - jsonLdDisclosure({ ... }) → JSON-LD <script> for structured-data emit
|
|
37
37
|
* - C2pa-stub → operator-feeds-claims pattern for
|
|
38
38
|
* C2PA Content Credentials integration
|
|
@@ -1407,14 +1407,11 @@ function postureDefault(posture, key) {
|
|
|
1407
1407
|
*
|
|
1408
1408
|
* @example
|
|
1409
1409
|
* b.compliance.posturesByDomain("privacy");
|
|
1410
|
-
* // → ["ccpa", "gdpr", "lgpd-br",
|
|
1411
|
-
* //
|
|
1410
|
+
* // → ["ccpa", "gdpr", "lgpd-br", ...] — every posture whose
|
|
1411
|
+
* // domain is "privacy" (the full set grows as regimes are added)
|
|
1412
1412
|
*
|
|
1413
1413
|
* b.compliance.posturesByDomain("health");
|
|
1414
|
-
* // → ["hipaa", "wmhmda"]
|
|
1415
|
-
*
|
|
1416
|
-
* b.compliance.posturesByDomain("payment");
|
|
1417
|
-
* // → ["pci-dss"]
|
|
1414
|
+
* // → ["hipaa", "wmhmda", ...] — every "health"-domain posture
|
|
1418
1415
|
*
|
|
1419
1416
|
* b.compliance.posturesByDomain("not-a-domain");
|
|
1420
1417
|
* // → []
|
|
@@ -1450,13 +1447,14 @@ function posturesByDomain(domain) {
|
|
|
1450
1447
|
*
|
|
1451
1448
|
* @example
|
|
1452
1449
|
* b.compliance.posturesByJurisdiction("EU");
|
|
1453
|
-
* // → ["gdpr", "dora", "nis2",
|
|
1450
|
+
* // → ["gdpr", "dora", "nis2", ...] — every EU-jurisdiction posture
|
|
1451
|
+
* // (the full set grows as regimes are added)
|
|
1454
1452
|
*
|
|
1455
1453
|
* b.compliance.posturesByJurisdiction("US");
|
|
1456
|
-
* // → ["hipaa", "soc2", "sox"]
|
|
1454
|
+
* // → ["hipaa", "soc2", "sox", ...] — every US-jurisdiction posture
|
|
1457
1455
|
*
|
|
1458
1456
|
* b.compliance.posturesByJurisdiction("US-CA");
|
|
1459
|
-
* // → ["ccpa"]
|
|
1457
|
+
* // → ["ccpa", ...] — every US-CA (California) posture
|
|
1460
1458
|
*
|
|
1461
1459
|
* b.compliance.posturesByJurisdiction("XX");
|
|
1462
1460
|
* // → []
|
|
@@ -127,8 +127,8 @@ function _scrubAttr(s) {
|
|
|
127
127
|
* `parseSafe`.
|
|
128
128
|
*
|
|
129
129
|
* @example
|
|
130
|
-
* var jar = b.cookies.parse("session=abc; theme
|
|
131
|
-
* // → { session: "abc", theme: "dark" }
|
|
130
|
+
* var jar = b.cookies.parse("session=abc; theme=dark%20mode");
|
|
131
|
+
* // → { session: "abc", theme: "dark mode" } // percent-decoded
|
|
132
132
|
*/
|
|
133
133
|
function parse(cookieHeader) {
|
|
134
134
|
var out = {};
|
|
@@ -227,7 +227,7 @@ async function sign(payload, opts) {
|
|
|
227
227
|
* @primitive b.cose.verify
|
|
228
228
|
* @signature b.cose.verify(coseSign1, opts)
|
|
229
229
|
* @since 0.12.33
|
|
230
|
-
* @status
|
|
230
|
+
* @status stable
|
|
231
231
|
* @related b.cose.sign, b.cbor.decode
|
|
232
232
|
*
|
|
233
233
|
* Verify a COSE_Sign1 (RFC 9052) and return its payload + headers.
|
|
@@ -495,9 +495,14 @@ function unsealRow(table, row) {
|
|
|
495
495
|
} catch (_e) { /* drop-silent */ }
|
|
496
496
|
unsealed = null;
|
|
497
497
|
}
|
|
498
|
-
//
|
|
499
|
-
//
|
|
500
|
-
|
|
498
|
+
// Assign unconditionally. `unsealed` already carries the right value
|
|
499
|
+
// for every branch: the plaintext on success, the original value on
|
|
500
|
+
// the not-actually-sealed pass-through (set above), and `null` on an
|
|
501
|
+
// unseal failure. The failure case MUST null the column so downstream
|
|
502
|
+
// sees "no value" rather than the attacker-crafted `vault:<…>` string
|
|
503
|
+
// (a prior `... ? unsealed : out[field]` guard silently kept the
|
|
504
|
+
// forged ciphertext on failure, defeating the documented defense).
|
|
505
|
+
out[field] = unsealed;
|
|
501
506
|
}
|
|
502
507
|
}
|
|
503
508
|
|
|
@@ -20,8 +20,9 @@
|
|
|
20
20
|
*
|
|
21
21
|
* - Art 4 §1 — let the user access "readily available product
|
|
22
22
|
* data" generated by their use of the connected product.
|
|
23
|
-
* `b.dataAct.
|
|
24
|
-
* operator-supplied data slice
|
|
23
|
+
* `b.dataAct.recordUserAccess({ productId, userId, dataSlice })`
|
|
24
|
+
* records the operator-supplied data slice for the regulator
|
|
25
|
+
* record.
|
|
25
26
|
* - Art 5 §1 — share that data with a third-party data
|
|
26
27
|
* recipient on the user's request, "without undue delay,
|
|
27
28
|
* free of charge to the user, of the same quality as is
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
* b.dataAct.declareProduct({ productId, dataHolder, ... })
|
|
47
48
|
* b.dataAct.recordUserAccess({ productId, userId, dataSlice, ... })
|
|
48
49
|
* b.dataAct.shareWithThirdParty({ productId, userId, recipient, scope })
|
|
49
|
-
*
|
|
50
|
+
* — refuses a DMA-gatekeeper recipient per Art 32 §1
|
|
50
51
|
* b.dataAct.recordSwitchRequest({ customerId, targetProvider, dataSlices })
|
|
51
52
|
*
|
|
52
53
|
* The framework does NOT host the connected-product data itself;
|
|
@@ -365,7 +365,7 @@ function resolve(did, opts) {
|
|
|
365
365
|
return { didDocument: docW, verificationMethods: _extractVerificationMethods(docW) };
|
|
366
366
|
}
|
|
367
367
|
|
|
368
|
-
throw new DidError("did/unsupported-method", "did.resolve: unsupported DID method '" + parsed.method + "' (did:key and did:web only)");
|
|
368
|
+
throw new DidError("did/unsupported-method", "did.resolve: unsupported DID method '" + parsed.method + "' (did:key, did:jwk, and did:web only)");
|
|
369
369
|
}
|
|
370
370
|
|
|
371
371
|
// Import a publicKeyJwk after allowlisting its kty/crv — a DID document
|
|
@@ -18,7 +18,14 @@
|
|
|
18
18
|
* for content gating and `b.guardFilename.gate({ profile: "strict" })`
|
|
19
19
|
* for filename gating. Operators opt out via `contentSafety: null`
|
|
20
20
|
* / `filenameSafety: null` (audited at create time so a security
|
|
21
|
-
* review can find the disabled-on-deploy rows).
|
|
21
|
+
* review can find the disabled-on-deploy rows). The byte-level
|
|
22
|
+
* content gate inspects the reassembled buffer, so it runs on uploads
|
|
23
|
+
* up to `maxStreamReassemblyBytes` (default 64 MiB); a larger upload
|
|
24
|
+
* is handed to `onFinalize` as a stream and the byte-content gate is
|
|
25
|
+
* skipped (MIME-sniff + filename gates still run, and the skip emits a
|
|
26
|
+
* `fileUpload.content_safety_skipped` warning audit). To guarantee
|
|
27
|
+
* content-gating of a type, cap `maxFileBytes` at or below
|
|
28
|
+
* `maxStreamReassemblyBytes`. Per-chunk hooks
|
|
22
29
|
* (`onChunk`) are the integration point for virus scanners and
|
|
23
30
|
* schema-shape checks; rejecting from the hook surfaces as a
|
|
24
31
|
* permanent `FileUploadError`.
|
|
@@ -1076,6 +1083,16 @@ function create(opts) {
|
|
|
1076
1083
|
// Clear the streaming alias if present — sanitized fits in memory.
|
|
1077
1084
|
bodyStream = null;
|
|
1078
1085
|
}
|
|
1086
|
+
} else if (safetyGate && typeof safetyGate.check === "function" && !bodyBuffer) {
|
|
1087
|
+
// A content-safety gate is configured for this extension, but the
|
|
1088
|
+
// upload streamed past maxStreamReassemblyBytes and was never
|
|
1089
|
+
// reassembled into a buffer the byte-level gate can inspect. The
|
|
1090
|
+
// MIME-sniff and filename gates still ran; the per-extension
|
|
1091
|
+
// content gate did NOT. Surface it (rather than skipping silently)
|
|
1092
|
+
// via an observability counter so operators can alert, lower
|
|
1093
|
+
// maxStreamReassemblyBytes, or cap maxFileBytes to force
|
|
1094
|
+
// content-gating of this type.
|
|
1095
|
+
_emitObs("fileUpload.content_safety_skipped_streamed", 1, { ext: safetyExt });
|
|
1079
1096
|
}
|
|
1080
1097
|
}
|
|
1081
1098
|
|
|
@@ -650,7 +650,7 @@ function _detectIssues(entries, opts) {
|
|
|
650
650
|
*
|
|
651
651
|
* @opts
|
|
652
652
|
* profile: "strict"|"balanced"|"permissive",
|
|
653
|
-
*
|
|
653
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
654
654
|
* traversalPolicy: "reject"|"audit"|"allow",
|
|
655
655
|
* absolutePathPolicy: "reject"|"audit"|"allow",
|
|
656
656
|
* symlinkPolicy: "reject"|"audit"|"allow",
|
|
@@ -723,7 +723,7 @@ function validateEntries(entries, opts) {
|
|
|
723
723
|
*
|
|
724
724
|
* @opts
|
|
725
725
|
* profile: "strict"|"balanced"|"permissive",
|
|
726
|
-
*
|
|
726
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
727
727
|
* name: string,
|
|
728
728
|
* ...: any validateEntries opt
|
|
729
729
|
*
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
*
|
|
35
35
|
* Profiles: `strict` / `balanced` / `permissive`. Compliance postures:
|
|
36
36
|
* `hipaa` / `pci-dss` / `gdpr` / `soc2`. Operators select via
|
|
37
|
-
* `{ profile: "strict" }` or `{
|
|
37
|
+
* `{ profile: "strict" }` or `{ compliancePosture: "hipaa" }`; postures
|
|
38
38
|
* overlay on the profile baseline.
|
|
39
39
|
*
|
|
40
40
|
* @card
|
|
@@ -205,7 +205,7 @@ function _detectIssues(bundle, opts) {
|
|
|
205
205
|
* @compliance hipaa, pci-dss, gdpr, soc2
|
|
206
206
|
* @related b.guardAuth.sanitize, b.guardAuth.gate, b.guardJwt.validate, b.guardOauth.validate
|
|
207
207
|
*
|
|
208
|
-
* Inspect an auth-bundle object and return `{ ok, issues
|
|
208
|
+
* Inspect an auth-bundle object and return `{ ok, issues }`.
|
|
209
209
|
* Each issue carries `{ kind, severity, ruleId, source, snippet }`
|
|
210
210
|
* with severity in `"warn"|"high"|"critical"` and `source` tagging
|
|
211
211
|
* the sub-guard that raised it (`"jwt"` / `"oauth"` / `"cookies"` /
|
|
@@ -219,7 +219,7 @@ function _detectIssues(bundle, opts) {
|
|
|
219
219
|
*
|
|
220
220
|
* @opts
|
|
221
221
|
* profile: "strict"|"balanced"|"permissive",
|
|
222
|
-
*
|
|
222
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
223
223
|
* childProfile: "strict"|"balanced"|"permissive", // forwarded to guardJwt / guardOauth
|
|
224
224
|
* requireAtLeastOne: boolean,
|
|
225
225
|
* allowedRedirectUris: string[], // forwarded to guardOauth
|
|
@@ -256,7 +256,7 @@ function validate(input, opts) {
|
|
|
256
256
|
*
|
|
257
257
|
* @opts
|
|
258
258
|
* profile: "strict"|"balanced"|"permissive",
|
|
259
|
-
*
|
|
259
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
260
260
|
*
|
|
261
261
|
* @example
|
|
262
262
|
* var clean = b.guardAuth.sanitize({
|
|
@@ -300,7 +300,7 @@ function sanitize(input, opts) {
|
|
|
300
300
|
*
|
|
301
301
|
* @opts
|
|
302
302
|
* profile: "strict"|"balanced"|"permissive",
|
|
303
|
-
*
|
|
303
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
304
304
|
* name: string, // gate identity for audit / observability
|
|
305
305
|
* childProfile: "strict"|"balanced"|"permissive",
|
|
306
306
|
* allowedRedirectUris: string[],
|
|
@@ -437,7 +437,7 @@ function _detectIssues(input, opts) {
|
|
|
437
437
|
* @compliance hipaa, pci-dss, gdpr, soc2
|
|
438
438
|
* @related b.guardCidr.sanitize, b.guardCidr.gate
|
|
439
439
|
*
|
|
440
|
-
* Inspect a CIDR notation string and return `{ ok, issues
|
|
440
|
+
* Inspect a CIDR notation string and return `{ ok, issues }`.
|
|
441
441
|
* Each issue carries `{ kind, severity, ruleId, snippet }` with
|
|
442
442
|
* severity in `"warn"|"high"|"critical"`. Detected: malformed address
|
|
443
443
|
* shape, octet-out-of-range, mask-out-of-range, network-address
|
|
@@ -448,7 +448,7 @@ function _detectIssues(input, opts) {
|
|
|
448
448
|
*
|
|
449
449
|
* @opts
|
|
450
450
|
* profile: "strict"|"balanced"|"permissive",
|
|
451
|
-
*
|
|
451
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
452
452
|
* family: "either"|"ipv4-only"|"ipv6-only",
|
|
453
453
|
* networkAlignmentPolicy: "reject"|"audit"|"allow",
|
|
454
454
|
* reservedRangesPolicy: "reject"|"audit"|"allow",
|
|
@@ -496,7 +496,7 @@ function validate(input, opts) {
|
|
|
496
496
|
*
|
|
497
497
|
* @opts
|
|
498
498
|
* profile: "strict"|"balanced"|"permissive",
|
|
499
|
-
*
|
|
499
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
500
500
|
*
|
|
501
501
|
* @example
|
|
502
502
|
* var safe = b.guardCidr.sanitize("2001:DB8::/32", { profile: "permissive" });
|
|
@@ -542,7 +542,7 @@ function sanitize(input, opts) {
|
|
|
542
542
|
*
|
|
543
543
|
* @opts
|
|
544
544
|
* profile: "strict"|"balanced"|"permissive",
|
|
545
|
-
*
|
|
545
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
546
546
|
* name: string, // gate identity for audit / observability
|
|
547
547
|
* family: "either"|"ipv4-only"|"ipv6-only",
|
|
548
548
|
*
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* Profiles: `strict` / `balanced` / `permissive` /
|
|
44
44
|
* `email-attachment`. Compliance postures: `hipaa` / `pci-dss` /
|
|
45
45
|
* `gdpr` / `soc2`. Operators select via `{ profile: "strict" }` or
|
|
46
|
-
* `{
|
|
46
|
+
* `{ compliancePosture: "hipaa" }`; postures overlay on top of the
|
|
47
47
|
* profile baseline.
|
|
48
48
|
*
|
|
49
49
|
* Threat-detection regex literals are composed programmatically
|
|
@@ -696,7 +696,7 @@ function schema(spec) {
|
|
|
696
696
|
*
|
|
697
697
|
* @opts
|
|
698
698
|
* profile: "strict"|"balanced"|"permissive"|"email-attachment",
|
|
699
|
-
*
|
|
699
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
700
700
|
* headers: string[]|false, // explicit column order; false suppresses header row
|
|
701
701
|
* delimiter: string, // default ","
|
|
702
702
|
* lineEnding: string, // default "\r\n"
|
|
@@ -802,7 +802,7 @@ function serialize(rows, opts) {
|
|
|
802
802
|
* @related b.guardCsv.sanitize, b.guardCsv.gate
|
|
803
803
|
*
|
|
804
804
|
* Inspect `input` (string or Buffer of CSV text) and return
|
|
805
|
-
* `{ ok, issues
|
|
805
|
+
* `{ ok, issues }`. Each issue carries `{ kind, severity,
|
|
806
806
|
* ruleId, location, snippet }` with severity in
|
|
807
807
|
* `"warn"|"high"|"critical"`. Detected: BOM mid-stream, Unicode
|
|
808
808
|
* bidi override (CVE-2021-42574), C0 control char, null byte,
|
|
@@ -813,7 +813,7 @@ function serialize(rows, opts) {
|
|
|
813
813
|
*
|
|
814
814
|
* @opts
|
|
815
815
|
* profile: "strict"|"balanced"|"permissive"|"email-attachment",
|
|
816
|
-
*
|
|
816
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
817
817
|
* bidiCharPolicy: "reject"|"strip"|"audit"|"allow",
|
|
818
818
|
* controlCharPolicy: "reject"|"strip"|"allow",
|
|
819
819
|
* nullByteHandling: "reject"|"strip"|"allow",
|
|
@@ -860,7 +860,7 @@ function validate(input, opts) {
|
|
|
860
860
|
*
|
|
861
861
|
* @opts
|
|
862
862
|
* profile: "strict"|"balanced"|"permissive"|"email-attachment",
|
|
863
|
-
*
|
|
863
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
864
864
|
* bidiCharPolicy: "reject"|"strip"|"audit"|"allow",
|
|
865
865
|
* controlCharPolicy: "reject"|"strip"|"allow",
|
|
866
866
|
* nullByteHandling: "reject"|"strip"|"allow",
|
|
@@ -981,7 +981,7 @@ function detect(input) {
|
|
|
981
981
|
*
|
|
982
982
|
* @opts
|
|
983
983
|
* profile: "strict"|"balanced"|"permissive"|"email-attachment",
|
|
984
|
-
*
|
|
984
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
985
985
|
* name: string, // gate identity for audit / observability
|
|
986
986
|
* operatorRules: [{ id: string, severity: "warn"|"high"|"critical",
|
|
987
987
|
* detect: function, reason: string }],
|
|
@@ -563,7 +563,7 @@ function _detectIssues(input, opts) {
|
|
|
563
563
|
* @compliance hipaa, pci-dss, gdpr, soc2
|
|
564
564
|
* @related b.guardDomain.sanitize, b.guardDomain.gate
|
|
565
565
|
*
|
|
566
|
-
* Inspect a domain-name string and return `{ ok, issues
|
|
566
|
+
* Inspect a domain-name string and return `{ ok, issues }`.
|
|
567
567
|
* Each issue carries `{ kind, severity, ruleId, snippet }` with
|
|
568
568
|
* severity in `"warn"|"high"|"critical"`. Detected: domain/label
|
|
569
569
|
* length cap (RFC 1035 §2.3.4), LDH violation, IDN A-label
|
|
@@ -575,7 +575,7 @@ function _detectIssues(input, opts) {
|
|
|
575
575
|
*
|
|
576
576
|
* @opts
|
|
577
577
|
* profile: "strict"|"balanced"|"permissive",
|
|
578
|
-
*
|
|
578
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
579
579
|
* ldhPolicy: "reject"|"audit"|"allow",
|
|
580
580
|
* punycodePolicy: "reject"|"audit"|"allow",
|
|
581
581
|
* mixedScriptPolicy: "reject"|"audit"|"allow",
|
|
@@ -635,7 +635,7 @@ function validate(input, opts) {
|
|
|
635
635
|
*
|
|
636
636
|
* @opts
|
|
637
637
|
* profile: "strict"|"balanced"|"permissive",
|
|
638
|
-
*
|
|
638
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
639
639
|
*
|
|
640
640
|
* @example
|
|
641
641
|
* var safe = b.guardDomain.sanitize("Example.Com.", { profile: "balanced" });
|
|
@@ -677,7 +677,7 @@ function sanitize(input, opts) {
|
|
|
677
677
|
*
|
|
678
678
|
* @opts
|
|
679
679
|
* profile: "strict"|"balanced"|"permissive",
|
|
680
|
-
*
|
|
680
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
681
681
|
* name: string, // gate identity for audit / observability
|
|
682
682
|
*
|
|
683
683
|
* @example
|
|
@@ -840,9 +840,10 @@ function sanitize(input, opts) {
|
|
|
840
840
|
* @status stable
|
|
841
841
|
* @related b.guardEmail.validateMessage, b.guardEmail.sanitize, b.guardAll.gate
|
|
842
842
|
*
|
|
843
|
-
* Build a guard gate
|
|
844
|
-
* dispatch. The returned async
|
|
845
|
-
* runs `validateMessage` against the extracted
|
|
843
|
+
* Build a guard gate compatible with the `b.guardAll` family
|
|
844
|
+
* dispatch. The returned gate's async `check(ctx)` method accepts a
|
|
845
|
+
* request-shaped context, runs `validateMessage` against the extracted
|
|
846
|
+
* bytes, and returns
|
|
846
847
|
* `{ ok, action, issues? }` where `action` is `serve` (no issues),
|
|
847
848
|
* `audit-only` (warn-level), or `refuse` (high / critical severity).
|
|
848
849
|
*
|
|
@@ -854,11 +855,11 @@ function sanitize(input, opts) {
|
|
|
854
855
|
* @example
|
|
855
856
|
* var guardEmail = require("./lib/guard-email");
|
|
856
857
|
* var g = guardEmail.gate({ profile: "strict" });
|
|
857
|
-
* typeof g;
|
|
858
|
+
* typeof g.check; // → "function"
|
|
858
859
|
*
|
|
859
860
|
* var msg = "From: alice@example.com\r\nTo: bob@example.com\r\n" +
|
|
860
861
|
* "Subject: hi\r\nDate: Mon, 5 May 2026 10:00:00 +0000\r\n\r\nbody\r\n";
|
|
861
|
-
* g({ body: Buffer.from(msg, "utf8") }).then(function (rv) {
|
|
862
|
+
* g.check({ body: Buffer.from(msg, "utf8") }).then(function (rv) {
|
|
862
863
|
* rv.action; // → "serve"
|
|
863
864
|
* });
|
|
864
865
|
*/
|
|
@@ -634,7 +634,7 @@ function _sanitize(input, opts) {
|
|
|
634
634
|
* @related b.guardFilename.sanitize, b.guardFilename.gate
|
|
635
635
|
*
|
|
636
636
|
* Inspect a filename (string or Buffer) and return
|
|
637
|
-
* `{ ok, issues
|
|
637
|
+
* `{ ok, issues }`. Each issue carries
|
|
638
638
|
* `{ kind, severity, ruleId, location, snippet }` with severity in
|
|
639
639
|
* `"warn"|"high"|"critical"`. Detected: path-traversal raw and
|
|
640
640
|
* percent-encoded, null-byte truncation, NTFS ADS, UNC path,
|
|
@@ -647,7 +647,7 @@ function _sanitize(input, opts) {
|
|
|
647
647
|
*
|
|
648
648
|
* @opts
|
|
649
649
|
* profile: "strict"|"balanced"|"permissive",
|
|
650
|
-
*
|
|
650
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
651
651
|
* bidiPolicy: "reject"|"strip"|"allow",
|
|
652
652
|
* controlPolicy: "reject"|"strip"|"allow",
|
|
653
653
|
* nullBytePolicy: "reject", // always reject
|
|
@@ -759,7 +759,7 @@ function _sanitizeStripMode(input, opts) {
|
|
|
759
759
|
*
|
|
760
760
|
* @opts
|
|
761
761
|
* profile: "strict"|"balanced"|"permissive",
|
|
762
|
-
*
|
|
762
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
763
763
|
* mode: "enforce"|"strip",
|
|
764
764
|
* audit: { safeEmit: function }, // optional sink for strip mode
|
|
765
765
|
* unicodeNormalization: "NFC"|null,
|
|
@@ -820,7 +820,7 @@ function sanitize(input, opts) {
|
|
|
820
820
|
*
|
|
821
821
|
* @opts
|
|
822
822
|
* profile: "strict"|"balanced"|"permissive",
|
|
823
|
-
*
|
|
823
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
824
824
|
* name: string, // gate identity for audit / observability
|
|
825
825
|
*
|
|
826
826
|
* @example
|
|
@@ -458,7 +458,7 @@ function _detectIssues(req, opts) {
|
|
|
458
458
|
* @related b.guardGraphql.sanitize, b.guardGraphql.gate
|
|
459
459
|
*
|
|
460
460
|
* Apply the full guard-graphql threat catalog to a request bundle
|
|
461
|
-
* (or batch array). Returns `{ ok, issues
|
|
461
|
+
* (or batch array). Returns `{ ok, issues }` per
|
|
462
462
|
* `gateContract.aggregateIssues`. Detected classes include
|
|
463
463
|
* `query-missing`, `query-cap`, `variables-cap`, `request-cap`,
|
|
464
464
|
* `batch-size`, `introspection`, `persisted-query-missing`,
|
|
@@ -469,7 +469,7 @@ function _detectIssues(req, opts) {
|
|
|
469
469
|
*
|
|
470
470
|
* @opts
|
|
471
471
|
* profile: "strict"|"balanced"|"permissive",
|
|
472
|
-
*
|
|
472
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
473
473
|
* introspectionPolicy: "reject"|"audit"|"allow",
|
|
474
474
|
* persistedQueryPolicy: "require"|"audit"|"allow",
|
|
475
475
|
* operationNamePolicy: "reject"|"audit"|"allow",
|
|
@@ -528,7 +528,7 @@ function validate(input, opts) {
|
|
|
528
528
|
*
|
|
529
529
|
* @opts
|
|
530
530
|
* profile: "strict"|"balanced"|"permissive",
|
|
531
|
-
*
|
|
531
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
532
532
|
* ...: every guardGraphql.validate opt is honored,
|
|
533
533
|
*
|
|
534
534
|
* @example
|
|
@@ -573,13 +573,13 @@ function sanitize(input, opts) {
|
|
|
573
573
|
*
|
|
574
574
|
* @opts
|
|
575
575
|
* profile: "strict"|"balanced"|"permissive",
|
|
576
|
-
*
|
|
576
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
577
577
|
* name: string, // gate label for audit trails
|
|
578
578
|
* ...: every guardGraphql.validate opt is honored,
|
|
579
579
|
*
|
|
580
580
|
* @example
|
|
581
581
|
* var gqlGate = b.guardGraphql.gate({ profile: "strict" });
|
|
582
|
-
* var rv = await gqlGate.
|
|
582
|
+
* var rv = await gqlGate.check({
|
|
583
583
|
* graphqlRequest: {
|
|
584
584
|
* query: "{ a:me { id } b:me { id } c:me { id } d:me { id } " +
|
|
585
585
|
* "e:me { id } f:me { id } g:me { id } h:me { id } " +
|
|
@@ -1030,7 +1030,7 @@ function sanitize(input, opts) {
|
|
|
1030
1030
|
* Returns a guard descriptor that plugs into the framework's
|
|
1031
1031
|
* content-safety wiring (`b.fileUpload.contentSafety` /
|
|
1032
1032
|
* `b.staticServe.contentSafety` / `b.guardAll`). The descriptor's
|
|
1033
|
-
* `
|
|
1033
|
+
* `check(ctx)` resolves to one of four actions: `serve` (no
|
|
1034
1034
|
* issues), `audit-only` (low-severity issues observed), `sanitize`
|
|
1035
1035
|
* (sanitized buffer attached when no policy is "reject"), or
|
|
1036
1036
|
* `refuse` (critical issue with at least one reject-policy active).
|
|
@@ -1057,7 +1057,7 @@ function sanitize(input, opts) {
|
|
|
1057
1057
|
*
|
|
1058
1058
|
* // Refuse on tag-budget exceeded — strict profile rejects <script>.
|
|
1059
1059
|
* var hostileBuf = Buffer.from("<p>hi</p><script>alert(1)</script>", "utf8");
|
|
1060
|
-
* var rv = await g.
|
|
1060
|
+
* var rv = await g.check({ bytes: hostileBuf, contentType: "text/html" });
|
|
1061
1061
|
* rv.ok; // → false
|
|
1062
1062
|
* rv.action; // → "refuse"
|
|
1063
1063
|
*/
|
|
@@ -421,7 +421,7 @@ function sanitize(input, opts) {
|
|
|
421
421
|
*
|
|
422
422
|
* @opts
|
|
423
423
|
* profile: "strict"|"balanced"|"permissive",
|
|
424
|
-
*
|
|
424
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
425
425
|
* name: string,
|
|
426
426
|
* ...: any validate opt
|
|
427
427
|
*
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
*
|
|
60
60
|
* Profiles: `strict` / `balanced` / `permissive`. Compliance
|
|
61
61
|
* postures: `hipaa` / `pci-dss` / `gdpr` / `soc2`. Operators select
|
|
62
|
-
* via `{ profile: "strict" }` or `{
|
|
62
|
+
* via `{ profile: "strict" }` or `{ compliancePosture: "hipaa" }`;
|
|
63
63
|
* postures overlay on top of the profile baseline.
|
|
64
64
|
*
|
|
65
65
|
* Source files MUST be pure ASCII; threat-detection regexes
|
|
@@ -571,7 +571,7 @@ function _stripPollutionTree(value, opts, depth) {
|
|
|
571
571
|
*
|
|
572
572
|
* Inspect `input` (string of JSON source) for the full guard-json
|
|
573
573
|
* threat catalog without committing to a parsed value. Returns
|
|
574
|
-
* `{ ok, issues
|
|
574
|
+
* `{ ok, issues }` where `issues` is the aggregated
|
|
575
575
|
* detector output — every prototype-pollution key, depth/breadth
|
|
576
576
|
* cap hit, duplicate-key smuggle, JSON5-quirk match, BOM placement,
|
|
577
577
|
* unicode threat, and numeric-precision-loss candidate is reported
|
|
@@ -587,7 +587,7 @@ function _stripPollutionTree(value, opts, depth) {
|
|
|
587
587
|
*
|
|
588
588
|
* @opts
|
|
589
589
|
* profile: "strict"|"balanced"|"permissive",
|
|
590
|
-
*
|
|
590
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
591
591
|
* pollutionPolicy: "reject"|"strip"|"audit"|"allow",
|
|
592
592
|
* duplicateKeyPolicy: "reject"|"audit"|"allow",
|
|
593
593
|
* nanInfinityPolicy: "reject"|"audit"|"allow",
|
|
@@ -660,7 +660,7 @@ function validate(input, opts) {
|
|
|
660
660
|
*
|
|
661
661
|
* @opts
|
|
662
662
|
* profile: "strict"|"balanced"|"permissive",
|
|
663
|
-
*
|
|
663
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
664
664
|
* pollutionPolicy: "reject"|"strip"|"audit"|"allow",
|
|
665
665
|
* bomPolicy: "reject"|"strip"|"allow",
|
|
666
666
|
* controlPolicy: "reject"|"strip"|"allow",
|
|
@@ -770,7 +770,7 @@ function _policyKeyForRuleId(ruleId) {
|
|
|
770
770
|
*
|
|
771
771
|
* @opts
|
|
772
772
|
* profile: "strict"|"balanced"|"permissive",
|
|
773
|
-
*
|
|
773
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
774
774
|
* name: string, // gate identity for audit / observability
|
|
775
775
|
*
|
|
776
776
|
* @example
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* Profiles: `strict` / `balanced` / `permissive`. Compliance
|
|
35
35
|
* postures: `hipaa` / `pci-dss` / `gdpr` / `soc2`. Operators
|
|
36
36
|
* select via `{ profile: "strict" }` or
|
|
37
|
-
* `{
|
|
37
|
+
* `{ compliancePosture: "hipaa" }`; postures overlay on top of the
|
|
38
38
|
* profile baseline. Filter / script / dynamic-hint refusal holds
|
|
39
39
|
* at every profile — the RCE class is never an operator opt-in.
|
|
40
40
|
*
|
|
@@ -257,7 +257,7 @@ function _detectIssues(input, opts) {
|
|
|
257
257
|
*
|
|
258
258
|
* @opts
|
|
259
259
|
* profile: "strict"|"balanced"|"permissive",
|
|
260
|
-
*
|
|
260
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
261
261
|
* bidiPolicy: "reject"|"audit"|"allow",
|
|
262
262
|
* controlPolicy: "reject"|"audit"|"allow",
|
|
263
263
|
* nullBytePolicy: "reject"|"audit"|"allow",
|
|
@@ -308,7 +308,7 @@ function validate(input, opts) {
|
|
|
308
308
|
*
|
|
309
309
|
* @opts
|
|
310
310
|
* profile: "strict"|"balanced"|"permissive",
|
|
311
|
-
*
|
|
311
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
312
312
|
* filterExprPolicy: "reject"|"audit"|"allow",
|
|
313
313
|
* scriptExprPolicy: "reject"|"audit"|"allow",
|
|
314
314
|
* dynamicHintPolicy: "reject"|"audit"|"allow",
|
|
@@ -360,7 +360,7 @@ function sanitize(input, opts) {
|
|
|
360
360
|
*
|
|
361
361
|
* @opts
|
|
362
362
|
* profile: "strict"|"balanced"|"permissive",
|
|
363
|
-
*
|
|
363
|
+
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
364
364
|
* name: string, // override gate name in audit emissions
|
|
365
365
|
* filterExprPolicy: "reject"|"audit"|"allow",
|
|
366
366
|
* scriptExprPolicy: "reject"|"audit"|"allow",
|