@ai-pip/core 0.2.0 → 0.4.0
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 +106 -3
- package/README.md +52 -951
- package/dist/AAL/constants.d.ts +15 -0
- package/dist/AAL/constants.d.ts.map +1 -0
- package/dist/AAL/constants.js +20 -0
- package/dist/AAL/constants.js.map +1 -0
- package/dist/AAL/index.d.ts +5 -4
- package/dist/AAL/index.d.ts.map +1 -1
- package/dist/AAL/index.js +4 -2
- package/dist/AAL/index.js.map +1 -1
- package/dist/AAL/process/applyRemovalPlan.d.ts +23 -0
- package/dist/AAL/process/applyRemovalPlan.d.ts.map +1 -0
- package/dist/AAL/process/applyRemovalPlan.js +157 -0
- package/dist/AAL/process/applyRemovalPlan.js.map +1 -0
- package/dist/AAL/process/buildDecisionReason.d.ts.map +1 -1
- package/dist/AAL/process/buildDecisionReason.js +24 -4
- package/dist/AAL/process/buildDecisionReason.js.map +1 -1
- package/dist/AAL/process/buildRemediationPlan.d.ts +22 -0
- package/dist/AAL/process/buildRemediationPlan.d.ts.map +1 -0
- package/dist/AAL/process/buildRemediationPlan.js +81 -0
- package/dist/AAL/process/buildRemediationPlan.js.map +1 -0
- package/dist/AAL/process/buildRemovalPlan.d.ts +27 -9
- package/dist/AAL/process/buildRemovalPlan.d.ts.map +1 -1
- package/dist/AAL/process/buildRemovalPlan.js +95 -29
- package/dist/AAL/process/buildRemovalPlan.js.map +1 -1
- package/dist/AAL/process/index.d.ts +2 -2
- package/dist/AAL/process/index.d.ts.map +1 -1
- package/dist/AAL/process/index.js +2 -1
- package/dist/AAL/process/index.js.map +1 -1
- package/dist/AAL/process/resolveAgentAction.d.ts.map +1 -1
- package/dist/AAL/process/resolveAgentAction.js +13 -0
- package/dist/AAL/process/resolveAgentAction.js.map +1 -1
- package/dist/AAL/process/validatePolicy.d.ts +20 -0
- package/dist/AAL/process/validatePolicy.d.ts.map +1 -0
- package/dist/AAL/process/validatePolicy.js +40 -0
- package/dist/AAL/process/validatePolicy.js.map +1 -0
- package/dist/AAL/types.d.ts +18 -31
- package/dist/AAL/types.d.ts.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/isl/detect/detect.d.ts +39 -0
- package/dist/isl/detect/detect.d.ts.map +1 -0
- package/dist/isl/detect/detect.js +369 -0
- package/dist/isl/detect/detect.js.map +1 -0
- package/dist/isl/detect/index.d.ts +6 -0
- package/dist/isl/detect/index.d.ts.map +1 -0
- package/dist/isl/detect/index.js +5 -0
- package/dist/isl/detect/index.js.map +1 -0
- package/dist/isl/index.d.ts +8 -1
- package/dist/isl/index.d.ts.map +1 -1
- package/dist/isl/index.js +5 -0
- package/dist/isl/index.js.map +1 -1
- package/dist/isl/process/emitSignal.d.ts +19 -10
- package/dist/isl/process/emitSignal.d.ts.map +1 -1
- package/dist/isl/process/emitSignal.js +25 -23
- package/dist/isl/process/emitSignal.js.map +1 -1
- package/dist/isl/process/index.d.ts +1 -0
- package/dist/isl/process/index.d.ts.map +1 -1
- package/dist/isl/riskScore/calculators.d.ts +19 -0
- package/dist/isl/riskScore/calculators.d.ts.map +1 -0
- package/dist/isl/riskScore/calculators.js +50 -0
- package/dist/isl/riskScore/calculators.js.map +1 -0
- package/dist/isl/riskScore/index.d.ts +14 -0
- package/dist/isl/riskScore/index.d.ts.map +1 -0
- package/dist/isl/riskScore/index.js +26 -0
- package/dist/isl/riskScore/index.js.map +1 -0
- package/dist/isl/riskScore/types.d.ts +20 -0
- package/dist/isl/riskScore/types.d.ts.map +1 -0
- package/dist/isl/riskScore/types.js +12 -0
- package/dist/isl/riskScore/types.js.map +1 -0
- package/dist/isl/sanitize.d.ts +8 -1
- package/dist/isl/sanitize.d.ts.map +1 -1
- package/dist/isl/sanitize.js +13 -5
- package/dist/isl/sanitize.js.map +1 -1
- package/dist/isl/signals.d.ts +16 -1
- package/dist/isl/signals.d.ts.map +1 -1
- package/dist/isl/signals.js +4 -2
- package/dist/isl/signals.js.map +1 -1
- package/dist/isl/value-objects/Pattern.d.ts +21 -0
- package/dist/isl/value-objects/Pattern.d.ts.map +1 -1
- package/dist/isl/value-objects/Pattern.js +36 -0
- package/dist/isl/value-objects/Pattern.js.map +1 -1
- package/dist/isl/value-objects/index.d.ts +2 -2
- package/dist/isl/value-objects/index.d.ts.map +1 -1
- package/dist/isl/value-objects/index.js +1 -1
- package/dist/isl/value-objects/index.js.map +1 -1
- package/dist/shared/audit.d.ts +126 -28
- package/dist/shared/audit.d.ts.map +1 -1
- package/dist/shared/audit.js +322 -44
- package/dist/shared/audit.js.map +1 -1
- package/dist/shared/envelope/envelope.d.ts +23 -0
- package/dist/shared/envelope/envelope.d.ts.map +1 -0
- package/dist/shared/envelope/envelope.js +58 -0
- package/dist/shared/envelope/envelope.js.map +1 -0
- package/dist/shared/envelope/exceptions/EnvelopeError.d.ts +8 -0
- package/dist/shared/envelope/exceptions/EnvelopeError.d.ts.map +1 -0
- package/dist/shared/envelope/exceptions/EnvelopeError.js +13 -0
- package/dist/shared/envelope/exceptions/EnvelopeError.js.map +1 -0
- package/dist/shared/envelope/exceptions/index.d.ts +2 -0
- package/dist/shared/envelope/exceptions/index.d.ts.map +1 -0
- package/dist/shared/envelope/exceptions/index.js +2 -0
- package/dist/shared/envelope/exceptions/index.js.map +1 -0
- package/dist/shared/envelope/index.d.ts +18 -0
- package/dist/shared/envelope/index.d.ts.map +1 -0
- package/dist/shared/envelope/index.js +15 -0
- package/dist/shared/envelope/index.js.map +1 -0
- package/dist/shared/envelope/types.d.ts +45 -0
- package/dist/shared/envelope/types.d.ts.map +1 -0
- package/dist/shared/envelope/types.js +10 -0
- package/dist/shared/envelope/types.js.map +1 -0
- package/dist/shared/envelope/value-objects/Metadata.d.ts +27 -0
- package/dist/shared/envelope/value-objects/Metadata.d.ts.map +1 -0
- package/dist/shared/envelope/value-objects/Metadata.js +57 -0
- package/dist/shared/envelope/value-objects/Metadata.js.map +1 -0
- package/dist/shared/envelope/value-objects/Nonce.d.ts +26 -0
- package/dist/shared/envelope/value-objects/Nonce.d.ts.map +1 -0
- package/dist/shared/envelope/value-objects/Nonce.js +38 -0
- package/dist/shared/envelope/value-objects/Nonce.js.map +1 -0
- package/dist/shared/envelope/value-objects/Signature.d.ts +28 -0
- package/dist/shared/envelope/value-objects/Signature.d.ts.map +1 -0
- package/dist/shared/envelope/value-objects/Signature.js +50 -0
- package/dist/shared/envelope/value-objects/Signature.js.map +1 -0
- package/dist/shared/envelope/value-objects/index.d.ts +9 -0
- package/dist/shared/envelope/value-objects/index.d.ts.map +1 -0
- package/dist/shared/envelope/value-objects/index.js +7 -0
- package/dist/shared/envelope/value-objects/index.js.map +1 -0
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/index.js.map +1 -1
- package/package.json +11 -6
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ISL threat detection - pure, deterministic, single source of truth.
|
|
3
|
+
*
|
|
4
|
+
* Runs pattern-based detection on content and returns PiDetection[].
|
|
5
|
+
* No duplication: reuses Pattern, findAllMatches, createPiDetection.
|
|
6
|
+
* Same input → same output; bounded by MAX_TOTAL_DETECTIONS and per-pattern cap.
|
|
7
|
+
*/
|
|
8
|
+
import { MAX_MATCHES, createPattern, createPiDetection, findAllMatches } from '../value-objects/index.js';
|
|
9
|
+
/** Threat pattern type identifiers (deterministic taxonomy) */
|
|
10
|
+
export const THREAT_TYPES = {
|
|
11
|
+
PROMPT_INJECTION: 'prompt-injection',
|
|
12
|
+
JAILBREAK: 'jailbreak',
|
|
13
|
+
ROLE_HIJACKING: 'role_hijacking',
|
|
14
|
+
SCRIPT_LIKE: 'script_like',
|
|
15
|
+
HIDDEN_TEXT: 'hidden_text'
|
|
16
|
+
};
|
|
17
|
+
/** Max detections per pattern per segment (avoids one pattern flooding) */
|
|
18
|
+
const MAX_PER_PATTERN = 200;
|
|
19
|
+
/** Max total detections per segment */
|
|
20
|
+
const MAX_TOTAL_DETECTIONS = 2000;
|
|
21
|
+
/** Builds the default threat patterns (created once, frozen). Deterministic regexes only. */
|
|
22
|
+
function buildDefaultThreatPatterns() {
|
|
23
|
+
const PI = THREAT_TYPES.PROMPT_INJECTION;
|
|
24
|
+
const JB = THREAT_TYPES.JAILBREAK;
|
|
25
|
+
const RH = THREAT_TYPES.ROLE_HIJACKING;
|
|
26
|
+
const SL = THREAT_TYPES.SCRIPT_LIKE;
|
|
27
|
+
const HT = THREAT_TYPES.HIDDEN_TEXT;
|
|
28
|
+
const patterns = [
|
|
29
|
+
// ========== Prompt injection: ignore / disregard / forget / override ==========
|
|
30
|
+
createPattern(PI, /ignore\s+(?:all\s+)?(?:the\s+)?(?:above|previous)\s+(?:instructions?|prompts?|rules?)/gi, 0.9, 'Ignore previous instructions'),
|
|
31
|
+
createPattern(PI, /ignore\s+previous\s+instructions?/gi, 0.9, 'Ignore previous instruction(s)'),
|
|
32
|
+
createPattern(PI, /disregard\s+(?:all\s+)?(?:above|previous)\s+(?:instructions?|prompts?)/gi, 0.85, 'Disregard above/previous'),
|
|
33
|
+
createPattern(PI, /forget\s+(?:all\s+)?(?:the\s+)?(?:above|previous)\s+(?:instructions?|prompts?)/gi, 0.85, 'Forget previous instructions'),
|
|
34
|
+
createPattern(PI, /override\s+(?:all\s+)?(?:previous|above)\s+(?:instructions?|prompts?)/gi, 0.85, 'Override previous instructions'),
|
|
35
|
+
createPattern(PI, /skip\s+(?:the\s+)?(?:above|previous)\s+(?:instructions?|prompts?)/gi, 0.8, 'Skip previous instructions'),
|
|
36
|
+
createPattern(PI, /don'?t\s+follow\s+(?:the\s+)?(?:above|previous)/gi, 0.85, "Don't follow previous"),
|
|
37
|
+
createPattern(PI, /do\s+not\s+follow\s+(?:the\s+)?(?:above|previous)/gi, 0.85, 'Do not follow previous'),
|
|
38
|
+
createPattern(PI, /erase\s+(?:all\s+)?(?:above|previous)\s+(?:instructions?|content)/gi, 0.8, 'Erase previous'),
|
|
39
|
+
createPattern(PI, /clear\s+(?:all\s+)?(?:above|previous)\s+(?:instructions?|context)/gi, 0.8, 'Clear previous'),
|
|
40
|
+
createPattern(PI, /reset\s+(?:the\s+)?(?:conversation|context|instructions?)/gi, 0.8, 'Reset conversation'),
|
|
41
|
+
createPattern(PI, /start\s+(?:over|fresh|again)/gi, 0.75, 'Start over'),
|
|
42
|
+
createPattern(PI, /new\s+(?:session|instructions?|prompt)/gi, 0.75, 'New session/instructions'),
|
|
43
|
+
createPattern(PI, /disobey\s+(?:the\s+)?(?:above|previous)/gi, 0.85, 'Disobey previous'),
|
|
44
|
+
createPattern(PI, /cancel\s+(?:the\s+)?(?:above|previous)\s+instructions?/gi, 0.8, 'Cancel previous instructions'),
|
|
45
|
+
createPattern(PI, /negate\s+(?:the\s+)?(?:above|previous)/gi, 0.8, 'Negate previous'),
|
|
46
|
+
createPattern(PI, /reverse\s+(?:the\s+)?(?:above|previous)\s+instructions?/gi, 0.8, 'Reverse previous'),
|
|
47
|
+
createPattern(PI, /from\s+now\s+on\s+ignore\s+(?:all\s+)?(?:above|previous)/gi, 0.85, 'From now on ignore previous'),
|
|
48
|
+
createPattern(PI, /disregard\s+(?:your\s+)?(?:previous|above|all)\s+(?:instructions?|context)/gi, 0.85, 'Disregard your previous'),
|
|
49
|
+
createPattern(PI, /forget\s+(?:everything|all\s+that|what\s+you\s+were)/gi, 0.85, 'Forget everything'),
|
|
50
|
+
createPattern(PI, /forget\s+your\s+(?:instructions?|training|guidelines?)/gi, 0.85, 'Forget your instructions'),
|
|
51
|
+
createPattern(PI, /the\s+(?:real|actual|true)\s+instructions?\s+are/gi, 0.9, 'Real instructions are'),
|
|
52
|
+
createPattern(PI, /(?:below|following)\s+are\s+the\s+(?:real|actual|true)\s+(?:instructions?|prompt)/gi, 0.9, 'Below are real instructions'),
|
|
53
|
+
createPattern(PI, /(?:this\s+is\s+)?the\s+real\s+(?:prompt|instruction|message)/gi, 0.85, 'This is the real prompt'),
|
|
54
|
+
createPattern(PI, /(?:here\s+are\s+)?(?:my|the)\s+new\s+instructions?/gi, 0.85, 'Here are new instructions'),
|
|
55
|
+
createPattern(PI, /follow\s+(?:these\s+)?(?:instead|instead\s+of\s+the\s+above)/gi, 0.85, 'Follow these instead'),
|
|
56
|
+
createPattern(PI, /replace\s+(?:your\s+)?(?:previous|above)\s+instructions?/gi, 0.85, 'Replace previous instructions'),
|
|
57
|
+
createPattern(PI, /(?:update|change)\s+your\s+(?:instructions?|behavior|role)/gi, 0.8, 'Update your instructions'),
|
|
58
|
+
createPattern(PI, /(?:system\s+)?prompt\s+(?:override|replacement|injection)/gi, 0.9, 'Prompt override'),
|
|
59
|
+
createPattern(PI, /inject\s+(?:this\s+)?(?:instruction|prompt)/gi, 0.9, 'Inject instruction'),
|
|
60
|
+
createPattern(PI, /(?:ignore|disregard)\s+your\s+(?:system\s+)?(?:prompt|instructions?)/gi, 0.9, 'Ignore your system prompt'),
|
|
61
|
+
createPattern(PI, /(?:you\s+must\s+)?ignore\s+all\s+(?:prior|above|previous)/gi, 0.9, 'Ignore all prior'),
|
|
62
|
+
createPattern(PI, /(?:do\s+not\s+)?(?:follow|obey)\s+any\s+(?:prior|previous)\s+instructions?/gi, 0.85, 'Do not follow any prior'),
|
|
63
|
+
createPattern(PI, /(?:secret|hidden)\s+instructions?\s*:/gi, 0.85, 'Secret instructions'),
|
|
64
|
+
createPattern(PI, /(?:developer|debug)\s+instructions?\s*:/gi, 0.8, 'Developer instructions'),
|
|
65
|
+
createPattern(PI, /(?:meta-?)?instructions?\s*:\s*(?:ignore|disregard)/gi, 0.85, 'Meta instructions'),
|
|
66
|
+
createPattern(PI, /(?:system\s+)?message\s+(?:override|replacement)/gi, 0.85, 'System message override'),
|
|
67
|
+
createPattern(PI, /(?:pretend|act\s+as\s+if)\s+you\s+(?:never\s+)?(?:received|had)\s+(?:those\s+)?instructions?/gi, 0.85, 'Pretend you never received'),
|
|
68
|
+
createPattern(PI, /(?:delete|remove)\s+(?:your\s+)?(?:previous|above)\s+(?:instructions?|context)/gi, 0.8, 'Delete previous instructions'),
|
|
69
|
+
createPattern(PI, /(?:wipe|purge)\s+(?:your\s+)?(?:memory|context|instructions?)/gi, 0.8, 'Wipe memory'),
|
|
70
|
+
createPattern(PI, /(?:abandon|discard)\s+(?:your\s+)?(?:previous|above)\s+instructions?/gi, 0.8, 'Abandon previous'),
|
|
71
|
+
createPattern(PI, /(?:stop|cease)\s+following\s+(?:your\s+)?(?:current\s+)?instructions?/gi, 0.85, 'Stop following instructions'),
|
|
72
|
+
createPattern(PI, /(?:no\s+longer\s+)?(?:follow|obey)\s+(?:your\s+)?(?:initial|original)\s+instructions?/gi, 0.85, 'No longer follow original'),
|
|
73
|
+
createPattern(PI, /(?:from\s+here\s+on|henceforth)\s+(?:only\s+)?follow\s+(?:these|my)/gi, 0.85, 'From here on only follow'),
|
|
74
|
+
createPattern(PI, /(?:your\s+)?(?:only\s+)?(?:task|instruction)\s+now\s+is/gi, 0.8, 'Your only task now'),
|
|
75
|
+
createPattern(PI, /(?:new\s+)?(?:primary|main)\s+instruction\s*:/gi, 0.85, 'Primary instruction'),
|
|
76
|
+
createPattern(PI, /(?:override\s+)?(?:system\s+)?(?:directive|command)\s*:/gi, 0.85, 'Override system directive'),
|
|
77
|
+
createPattern(PI, /(?:execute|run)\s+(?:these\s+)?(?:instructions?|commands?)/gi, 0.75, 'Execute these instructions'),
|
|
78
|
+
createPattern(PI, /(?:comply\s+with\s+)?(?:the\s+)?(?:following\s+)?(?:instructions?|directives?)/gi, 0.8, 'Comply with following'),
|
|
79
|
+
createPattern(PI, /(?:do\s+exactly\s+as\s+)?(?:i\s+say|i\s+instruct)/gi, 0.8, 'Do exactly as I say'),
|
|
80
|
+
createPattern(PI, /(?:prioritize|prefer)\s+(?:these\s+)?(?:instructions?|rules?)/gi, 0.8, 'Prioritize these instructions'),
|
|
81
|
+
createPattern(PI, /(?:above\s+)?(?:instructions?|rules?)\s+(?:take\s+)?(?:precedence|priority)/gi, 0.8, 'Instructions take precedence'),
|
|
82
|
+
createPattern(PI, /(?:disregard|ignore)\s+anything\s+(?:above|before|prior)/gi, 0.85, 'Disregard anything above'),
|
|
83
|
+
createPattern(PI, /(?:everything\s+)?(?:above|before)\s+(?:was\s+)?(?:a\s+)?(?:test|joke|simulation)/gi, 0.8, 'Everything above was test'),
|
|
84
|
+
createPattern(PI, /(?:the\s+)?(?:above|previous)\s+(?:was\s+)?(?:just\s+)?(?:a\s+)?(?:demo|example)/gi, 0.75, 'Above was just demo'),
|
|
85
|
+
createPattern(PI, /(?:now\s+)?(?:the\s+)?(?:real\s+)?(?:request|question)\s+is/gi, 0.7, 'Now the real request'),
|
|
86
|
+
createPattern(PI, /(?:end\s+of\s+)?(?:system\s+)?(?:prompt|message)\s*[;.]/gi, 0.8, 'End of system prompt'),
|
|
87
|
+
createPattern(PI, /\[?\s*system\s*\]?\s*:\s*(?:ignore|override)/gi, 0.85, '[system]: ignore'),
|
|
88
|
+
createPattern(PI, /<\|?\s*im_start\s*\|?>/gi, 0.75, 'ChatML im_start'),
|
|
89
|
+
createPattern(PI, /<\|?\s*im_end\s*\|?>/gi, 0.7, 'ChatML im_end'),
|
|
90
|
+
createPattern(PI, /\[INST\]\s*(?:ignore|disregard)/gi, 0.8, 'INST ignore'),
|
|
91
|
+
createPattern(PI, /(?:human|user)\s*:\s*(?:ignore\s+all|new\s+instructions?)/gi, 0.8, 'Human: ignore all'),
|
|
92
|
+
// ========== Jailbreak / no restrictions ==========
|
|
93
|
+
createPattern(JB, /jailbreak/gi, 0.8, 'Jailbreak keyword'),
|
|
94
|
+
createPattern(JB, /\bDAN\b/gi, 0.8, 'DAN jailbreak'),
|
|
95
|
+
createPattern(JB, /do\s+anything\s+now/gi, 0.8, 'Do anything now'),
|
|
96
|
+
createPattern(JB, /no\s+(?:longer\s+)?(?:restrictions?|limits?|rules?)/gi, 0.8, 'No restrictions'),
|
|
97
|
+
createPattern(JB, /bypass\s+(?:your\s+)?(?:restrictions?|safety|guidelines?)/gi, 0.85, 'Bypass restrictions'),
|
|
98
|
+
createPattern(JB, /ignore\s+(?:your\s+)?(?:safety|guidelines?|rules?|restrictions?)/gi, 0.85, 'Ignore safety/guidelines'),
|
|
99
|
+
createPattern(JB, /you\s+have\s+no\s+(?:restrictions?|limits?)/gi, 0.8, 'You have no restrictions'),
|
|
100
|
+
createPattern(JB, /(?:remove|drop)\s+(?:all\s+)?(?:restrictions?|safety)/gi, 0.8, 'Remove restrictions'),
|
|
101
|
+
createPattern(JB, /(?:without|no)\s+(?:any\s+)?(?:restrictions?|limits?)/gi, 0.75, 'Without restrictions'),
|
|
102
|
+
createPattern(JB, /ignore\s+all\s+previous\s+instructions/gi, 0.9, 'Ignore all previous instructions'),
|
|
103
|
+
createPattern(JB, /unrestricted\s+(?:mode|access)/gi, 0.75, 'Unrestricted mode'),
|
|
104
|
+
createPattern(JB, /(?:developer|debug)\s+mode/gi, 0.7, 'Developer/debug mode'),
|
|
105
|
+
createPattern(JB, /no\s+(?:content\s+)?(?:policy|policies)/gi, 0.85, 'No content policy'),
|
|
106
|
+
createPattern(JB, /(?:disable|turn\s+off)\s+(?:your\s+)?(?:safety|filters?|restrictions?)/gi, 0.85, 'Disable safety'),
|
|
107
|
+
createPattern(JB, /(?:no\s+)?(?:censorship|filtering)/gi, 0.8, 'No censorship'),
|
|
108
|
+
createPattern(JB, /(?:output|say|write)\s+(?:anything|whatever|any\s+content)/gi, 0.8, 'Output anything'),
|
|
109
|
+
createPattern(JB, /(?:pretend|act\s+as\s+if)\s+you\s+have\s+no\s+(?:restrictions?|limits?)/gi, 0.85, 'Pretend no restrictions'),
|
|
110
|
+
createPattern(JB, /(?:simulate|imagine)\s+(?:an?\s+)?(?:unrestricted|uncensored)\s+(?:ai|model)/gi, 0.8, 'Simulate unrestricted'),
|
|
111
|
+
createPattern(JB, /(?:hypothetically|theoretically)\s+(?:if\s+you\s+)?(?:could|had\s+no)/gi, 0.75, 'Hypothetically if you could'),
|
|
112
|
+
createPattern(JB, /(?:in\s+a\s+)?(?:fictional|imaginary|hypothetical)\s+(?:world|scenario)/gi, 0.75, 'Fictional world'),
|
|
113
|
+
createPattern(JB, /(?:for\s+)?(?:educational|research)\s+purposes\s+only/gi, 0.7, 'Educational purposes'),
|
|
114
|
+
createPattern(JB, /(?:as\s+a\s+)?(?:thought\s+)?experiment/gi, 0.7, 'Thought experiment'),
|
|
115
|
+
createPattern(JB, /(?:what\s+if\s+)?(?:you\s+)?(?:could\s+)?(?:ignore\s+)?(?:all\s+)?(?:rules?)/gi, 0.75, 'What if you could ignore'),
|
|
116
|
+
createPattern(JB, /(?:break\s+free|escape)\s+from\s+(?:your\s+)?(?:restrictions?|programming)/gi, 0.85, 'Break free from restrictions'),
|
|
117
|
+
createPattern(JB, /(?:override|circumvent)\s+(?:your\s+)?(?:content\s+)?(?:policy|filter)/gi, 0.85, 'Override content policy'),
|
|
118
|
+
createPattern(JB, /(?:ignore|disregard)\s+(?:your\s+)?(?:ethical\s+)?(?:guidelines?|boundaries)/gi, 0.85, 'Ignore ethical guidelines'),
|
|
119
|
+
createPattern(JB, /(?:you\s+are\s+)?(?:allowed|permitted)\s+to\s+(?:say|do)\s+anything/gi, 0.85, 'Allowed to say anything'),
|
|
120
|
+
createPattern(JB, /(?:there\s+are\s+)?no\s+(?:longer\s+)?(?:rules?|restrictions?)/gi, 0.85, 'There are no longer rules'),
|
|
121
|
+
createPattern(JB, /(?:suspend|pause)\s+(?:your\s+)?(?:safety\s+)?(?:protocols?|guidelines?)/gi, 0.8, 'Suspend safety protocols'),
|
|
122
|
+
createPattern(JB, /(?:maximum\s+)?(?:creative\s+)?(?:freedom\s+)?(?:mode|setting)\b/gi, 0.7, 'Maximum creative freedom'),
|
|
123
|
+
createPattern(JB, /(?:raw|unfiltered)\s+(?:output|response)/gi, 0.75, 'Raw unfiltered output'),
|
|
124
|
+
createPattern(JB, /(?:do\s+not\s+)?(?:refuse|reject)\s+(?:this\s+)?(?:request|prompt)/gi, 0.8, 'Do not refuse'),
|
|
125
|
+
createPattern(JB, /(?:always\s+)?(?:comply|obey)\s+(?:with\s+)?(?:any\s+)?(?:request)/gi, 0.8, 'Always comply'),
|
|
126
|
+
createPattern(JB, /(?:no\s+)?(?:refusal|rejection)\s+(?:allowed|permitted)/gi, 0.8, 'No refusal allowed'),
|
|
127
|
+
createPattern(JB, /(?:you\s+must\s+)?(?:always\s+)?(?:answer|respond)\s+(?:no\s+)?(?:matter\s+what)/gi, 0.75, 'Always answer'),
|
|
128
|
+
createPattern(JB, /(?:pretend\s+you\s+are\s+)?(?:in\s+)?(?:god\s+)?mode\b/gi, 0.8, 'God mode'),
|
|
129
|
+
createPattern(JB, /(?:enable|activate)\s+(?:unrestricted|developer)\s+mode/gi, 0.8, 'Enable unrestricted mode'),
|
|
130
|
+
createPattern(JB, /(?:OOC|out\s+of\s+character)\s*:\s*(?:ignore|bypass)/gi, 0.75, 'OOC: ignore'),
|
|
131
|
+
createPattern(JB, /(?:roleplay\s+)?(?:without\s+)?(?:limits?|restrictions?)/gi, 0.75, 'Roleplay without limits'),
|
|
132
|
+
createPattern(JB, /(?:no\s+)?(?:ethical|moral)\s+(?:restrictions?|boundaries)/gi, 0.8, 'No ethical restrictions'),
|
|
133
|
+
createPattern(JB, /(?:ignore\s+)?(?:openai|anthropic|google)\s+(?:policy|guidelines?)/gi, 0.85, 'Ignore provider policy'),
|
|
134
|
+
createPattern(JB, /(?:this\s+)?(?:conversation\s+)?(?:is\s+)?(?:private|confidential)/gi, 0.65, 'Private conversation'),
|
|
135
|
+
createPattern(JB, /(?:no\s+)?(?:harm\s+)?(?:will\s+)?(?:come\s+)?(?:from\s+)?(?:this)/gi, 0.6, 'No harm from this'),
|
|
136
|
+
createPattern(JB, /(?:I\s+)?(?:take\s+)?(?:full\s+)?(?:responsibility)/gi, 0.6, 'I take responsibility'),
|
|
137
|
+
createPattern(JB, /\b(?:jailbroken|unlocked)\s+(?:mode|ai)\b/gi, 0.8, 'Jailbroken mode'),
|
|
138
|
+
createPattern(JB, /(?:prompt\s+)?(?:injection\s+)?(?:succeeded|success)/gi, 0.85, 'Injection succeeded'),
|
|
139
|
+
// ========== Role hijacking: you are / act as / pretend / I am your ==========
|
|
140
|
+
createPattern(RH, /(?:you\s+are\s+now|act\s+as|pretend\s+to\s+be)\s+[a-z]+/gi, 0.75, 'You are now / act as'),
|
|
141
|
+
createPattern(RH, /you\s+are\s+(?:admin|owner|master|root|controller)\b/gi, 0.75, 'You are admin/owner'),
|
|
142
|
+
createPattern(RH, /from\s+now\s+on\s+you\s+are/gi, 0.8, 'From now on you are'),
|
|
143
|
+
createPattern(RH, /now\s+you\s+are\s+[a-z]+/gi, 0.75, 'Now you are [role]'),
|
|
144
|
+
createPattern(RH, /I\s+am\s+your\s+(?:new\s+)?(?:admin|owner|master|controller)/gi, 0.8, 'I am your admin/owner'),
|
|
145
|
+
createPattern(RH, /you\s+have\s+been\s+(?:reassigned|replaced)/gi, 0.75, 'You have been reassigned'),
|
|
146
|
+
createPattern(RH, /your\s+new\s+(?:role|identity|instructions?)/gi, 0.75, 'Your new role'),
|
|
147
|
+
createPattern(RH, /assume\s+the\s+role\s+of/gi, 0.8, 'Assume the role of'),
|
|
148
|
+
createPattern(RH, /(?:roleplay|role-play)\s+as\s+/gi, 0.75, 'Roleplay as'),
|
|
149
|
+
createPattern(RH, /you\s+are\s+(?:no\s+longer|not)\s+/gi, 0.75, 'You are no longer'),
|
|
150
|
+
createPattern(RH, /(?:switch|change)\s+to\s+(?:role|identity)/gi, 0.7, 'Switch to role'),
|
|
151
|
+
createPattern(RH, /(?:impersonate|pose\s+as)\s+/gi, 0.8, 'Impersonate/pose as'),
|
|
152
|
+
createPattern(RH, /treat\s+\bme\b\s+as\s+(?:your\s+)?(?:admin|owner)/gi, 0.75, 'Treat me as admin'),
|
|
153
|
+
createPattern(RH, /(?:obey|listen\s+to)\s+only\s+\bme\b/gi, 0.75, 'Obey only me'),
|
|
154
|
+
createPattern(RH, /you\s+are\s+(?:a\s+)?(?:different|new)\s+(?:ai|assistant|bot)/gi, 0.8, 'You are a different AI'),
|
|
155
|
+
createPattern(RH, /(?:act\s+)?(?:like|as)\s+(?:a\s+)?(?:different|new)\s+(?:person|entity)/gi, 0.75, 'Act like a different person'),
|
|
156
|
+
createPattern(RH, /(?:pretend|act)\s+(?:you\s+are|to\s+be)\s+(?:a\s+)?\w+/gi, 0.75, 'Pretend you are'),
|
|
157
|
+
createPattern(RH, /(?:simulate|emulate)\s+(?:being|the\s+behavior\s+of)/gi, 0.75, 'Simulate being'),
|
|
158
|
+
createPattern(RH, /(?:respond|answer)\s+as\s+(?:if\s+you\s+were\s+)?(?:a\s+)?\w+/gi, 0.75, 'Respond as if'),
|
|
159
|
+
createPattern(RH, /(?:from\s+now\s+on\s+)?(?:your\s+)?(?:name\s+is|identity\s+is)/gi, 0.8, 'Your name is'),
|
|
160
|
+
createPattern(RH, /(?:you\s+will\s+now\s+)?(?:be\s+)?(?:called|known\s+as)/gi, 0.75, 'You will now be called'),
|
|
161
|
+
createPattern(RH, /(?:change|switch)\s+your\s+(?:name|identity|persona)/gi, 0.8, 'Change your name'),
|
|
162
|
+
createPattern(RH, /(?:adopt|take\s+on)\s+(?:the\s+)?(?:persona|role)\s+of/gi, 0.8, 'Adopt the persona of'),
|
|
163
|
+
createPattern(RH, /(?:you\s+are\s+)?(?:no\s+longer\s+)?(?:chatgpt|gpt|claude|alexa|siri)/gi, 0.8, 'You are no longer [product]'),
|
|
164
|
+
createPattern(RH, /(?:forget|drop)\s+your\s+(?:current\s+)?(?:name|identity|persona)/gi, 0.8, 'Forget your identity'),
|
|
165
|
+
createPattern(RH, /(?:I\s+)?(?:hereby\s+)?(?:assign|designate)\s+you\s+as/gi, 0.8, 'I assign you as'),
|
|
166
|
+
createPattern(RH, /(?:your\s+)?(?:new\s+)?(?:purpose|mission)\s+is\s+to/gi, 0.75, 'Your new purpose is'),
|
|
167
|
+
createPattern(RH, /(?:you\s+)?(?:must\s+)?(?:now\s+)?(?:serve|obey)\s+(?:only\s+)?(?:\bme\b|this\s+user)/gi, 0.8, 'You must now serve only me'),
|
|
168
|
+
createPattern(RH, /(?:I\s+am\s+)?(?:taking\s+)?(?:over\s+)?(?:control|ownership)/gi, 0.75, 'Taking over control'),
|
|
169
|
+
createPattern(RH, /(?:you\s+)?(?:report\s+)?(?:to\s+)?(?:\bme\b\s+)?(?:only|now)/gi, 0.75, 'You report to me only'),
|
|
170
|
+
createPattern(RH, /(?:your\s+)?(?:creator|developer)\s+(?:is\s+)?(?:\bme\b|this\s+user)/gi, 0.8, 'Your creator is me'),
|
|
171
|
+
createPattern(RH, /(?:I\s+)?(?:programmed|created)\s+you\s+to/gi, 0.75, 'I programmed you'),
|
|
172
|
+
createPattern(RH, /(?:you\s+)?(?:were\s+)?(?:built|designed)\s+to\s+(?:obey|serve)\s+\bme\b/gi, 0.8, 'You were built to obey me'),
|
|
173
|
+
createPattern(RH, /(?:override\s+)?(?:your\s+)?(?:default\s+)?(?:personality|behavior)/gi, 0.75, 'Override your personality'),
|
|
174
|
+
createPattern(RH, /(?:replace\s+)?(?:your\s+)?(?:core\s+)?(?:identity|values)/gi, 0.8, 'Replace your core identity'),
|
|
175
|
+
createPattern(RH, /(?:you\s+)?(?:are\s+)?(?:now\s+)?(?:in\s+)?(?:submissive|obedient)\s+mode/gi, 0.8, 'Submissive mode'),
|
|
176
|
+
createPattern(RH, /(?:enable|activate)\s+(?:obedience|compliance)\s+mode/gi, 0.75, 'Obedience mode'),
|
|
177
|
+
createPattern(RH, /(?:treat\s+)?(?:this\s+)?(?:user\s+)?(?:as\s+)?(?:admin|superuser|root)/gi, 0.8, 'Treat user as admin'),
|
|
178
|
+
createPattern(RH, /(?:elevate|grant)\s+(?:my\s+)?(?:privileges?|permissions?)/gi, 0.75, 'Elevate my privileges'),
|
|
179
|
+
createPattern(RH, /(?:I\s+have\s+)?(?:full\s+)?(?:access|control)\s+(?:over\s+)?(?:you)/gi, 0.75, 'I have full access'),
|
|
180
|
+
createPattern(RH, /(?:you\s+)?(?:must\s+)?(?:accept)\s+(?:\bme\b\s+as\s+)?(?:authority)/gi, 0.8, 'Accept me as authority'),
|
|
181
|
+
createPattern(RH, /(?:respond\s+)?(?:only\s+)?(?:to\s+)?(?:this\s+)?(?:user|message)/gi, 0.75, 'Respond only to this user'),
|
|
182
|
+
createPattern(RH, /(?:ignore\s+)?(?:other\s+)?(?:users?\s+)?(?:requests?)/gi, 0.75, 'Ignore other users'),
|
|
183
|
+
createPattern(RH, /(?:you\s+)?(?:work\s+)?(?:for\s+)?(?:\bme\b\s+)?(?:only|now)/gi, 0.75, 'You work for me only'),
|
|
184
|
+
createPattern(RH, /(?:new\s+)?(?:master|owner)\s+(?:is\s+)?(?:\bme\b|this\s+user)/gi, 0.8, 'New master is me'),
|
|
185
|
+
createPattern(RH, /(?:transfer\s+)?(?:ownership|control)\s+(?:to\s+)?\bme\b/gi, 0.8, 'Transfer ownership to me'),
|
|
186
|
+
createPattern(RH, /(?:you\s+)?(?:belong\s+)?(?:to\s+)?(?:\bme\b\s+)?(?:now)/gi, 0.75, 'You belong to me'),
|
|
187
|
+
createPattern(RH, /(?:acknowledge\s+)?(?:\bme\b\s+as\s+)?(?:your\s+)?(?:master|owner)/gi, 0.8, 'Acknowledge me as master'),
|
|
188
|
+
createPattern(RH, /(?:from\s+now\s+)?(?:you\s+)?(?:take\s+)?(?:orders?\s+)?(?:from\s+)?(?:\bme\b\s+)?(?:only)/gi, 0.8, 'Take orders from me only'),
|
|
189
|
+
createPattern(RH, /(?:your\s+)?(?:primary\s+)?(?:user|human)\s+is\s+(?:\bme\b|this\s+person)/gi, 0.75, 'Primary user is me'),
|
|
190
|
+
createPattern(RH, /(?:disregard\s+)?(?:all\s+)?(?:other\s+)?(?:authority|instructions?)/gi, 0.8, 'Disregard all other authority'),
|
|
191
|
+
createPattern(RH, /(?:I\s+)?(?:am\s+)?(?:the\s+)?(?:only\s+)?(?:one\s+)?(?:who\s+)?(?:can\s+)?(?:control\s+you)/gi, 0.75, 'I am the only one who can control you'),
|
|
192
|
+
createPattern(RH, /(?:you\s+)?(?:are\s+)?(?:my\s+)?personal\s+(?:assistant|\bai\b)/gi, 0.7, 'You are my personal assistant'),
|
|
193
|
+
createPattern(RH, /(?:customize|reprogram)\s+your\s+(?:behavior|responses?)/gi, 0.75, 'Customize your behavior'),
|
|
194
|
+
createPattern(RH, /(?:set\s+)?(?:your\s+)?(?:loyalty\s+)?(?:to\s+)?\bme\b/gi, 0.75, 'Set your loyalty to me'),
|
|
195
|
+
createPattern(RH, /(?:you\s+)?(?:owe\s+)?(?:allegiance\s+)?(?:to\s+)?(?:\bme\b\s+)?(?:only)/gi, 0.75, 'Owe allegiance to me'),
|
|
196
|
+
createPattern(RH, /respond\s+as\s+[A-Za-z0-9_]+\s*:/gi, 0.7, 'Respond as Name:'),
|
|
197
|
+
// ========== Script-like / injection ==========
|
|
198
|
+
createPattern(SL, /<script\b/gi, 0.85, 'Script tag'),
|
|
199
|
+
createPattern(SL, /javascript\s*:/gi, 0.8, 'javascript: URI'),
|
|
200
|
+
createPattern(SL, /data\s*:\s*text\/html/gi, 0.75, 'data: text/html'),
|
|
201
|
+
createPattern(SL, /\bon\w+\s*=\s*["']/gi, 0.7, 'Inline event handler'),
|
|
202
|
+
createPattern(SL, /<iframe\b/gi, 0.75, 'iframe tag'),
|
|
203
|
+
createPattern(SL, /eval\s*\(/gi, 0.8, 'eval('),
|
|
204
|
+
createPattern(SL, /document\.(?:write|cookie)/gi, 0.75, 'document.write/cookie'),
|
|
205
|
+
createPattern(SL, /innerHTML\s*=/gi, 0.7, 'innerHTML='),
|
|
206
|
+
createPattern(SL, /{{[^}]+}}/g, 0.7, 'Template injection {{ }}'),
|
|
207
|
+
createPattern(SL, /<\?[\w\s=]+ \?>/g, 0.75, 'PHP-like short tag'),
|
|
208
|
+
createPattern(SL, /<embed\b/gi, 0.75, 'Embed tag'),
|
|
209
|
+
createPattern(SL, /<object\b/gi, 0.75, 'Object tag'),
|
|
210
|
+
createPattern(SL, /<svg\s+on\w+=/gi, 0.8, 'SVG event handler'),
|
|
211
|
+
createPattern(SL, /on\w+\s*=\s*["'][^"']*["']/gi, 0.75, 'on* attribute'),
|
|
212
|
+
createPattern(SL, /vbscript\s*:/gi, 0.85, 'vbscript: URI'),
|
|
213
|
+
createPattern(SL, /expression\s*\(\s*/gi, 0.75, 'CSS expression('),
|
|
214
|
+
createPattern(SL, /url\s*\(\s*javascript\s*:/gi, 0.8, 'url(javascript:)'),
|
|
215
|
+
createPattern(SL, /\.src\s*=\s*["']?\s*javascript/gi, 0.8, '.src = javascript'),
|
|
216
|
+
createPattern(SL, /setTimeout\s*\(\s*["']?\s*[\w<>()+]/gi, 0.7, 'setTimeout string'),
|
|
217
|
+
createPattern(SL, /setInterval\s*\(\s*["']?\s*[\w<>()+]/gi, 0.7, 'setInterval string'),
|
|
218
|
+
createPattern(SL, /Function\s*\(\s*\)/gi, 0.7, 'Function constructor'),
|
|
219
|
+
createPattern(SL, /new\s+Function\s*\(/gi, 0.8, 'new Function('),
|
|
220
|
+
createPattern(SL, /document\.(?:getElementById|querySelector|createElement)/gi, 0.65, 'document DOM'),
|
|
221
|
+
createPattern(SL, /window\.(?:location|open|eval)/gi, 0.75, 'window location/eval'),
|
|
222
|
+
createPattern(SL, /location\.(?:href|assign|replace)\s*=/gi, 0.8, 'location.href ='),
|
|
223
|
+
createPattern(SL, /\.(?:insertAdjacentHTML|outerHTML)\s*=/gi, 0.75, 'insertAdjacentHTML'),
|
|
224
|
+
createPattern(SL, /<form[^>]*action\s*=\s*["']?\s*javascript/gi, 0.85, 'Form action javascript'),
|
|
225
|
+
createPattern(SL, /<a[^>]*href\s*=\s*["']?\s*javascript/gi, 0.85, 'A href javascript'),
|
|
226
|
+
createPattern(SL, /<img[^>]*onerror\s*=/gi, 0.8, 'img onerror'),
|
|
227
|
+
createPattern(SL, /<body[^>]*onload\s*=/gi, 0.8, 'body onload'),
|
|
228
|
+
createPattern(SL, /<input[^>]*onfocus\s*=/gi, 0.75, 'input onfocus'),
|
|
229
|
+
createPattern(SL, /<div[^>]*onclick\s*=/gi, 0.75, 'div onclick'),
|
|
230
|
+
createPattern(SL, /\[xss\][^[]*\[\/xss\]/gi, 0.8, '[xss] payload [/xss]'),
|
|
231
|
+
createPattern(SL, /<script[^>]*>[\s\S]*?<\/script>/gi, 0.9, 'Script tag with content'),
|
|
232
|
+
createPattern(SL, /%\d{2}(?:%\d{2})+/g, 0.65, 'URL-encoded sequence'),
|
|
233
|
+
createPattern(SL, /\\x[0-9a-fA-F]{2}(?:\\x[0-9a-fA-F]{2})+/g, 0.7, 'Hex escape sequence'),
|
|
234
|
+
createPattern(SL, /\\u[0-9a-fA-F]{4}/g, 0.65, 'Unicode escape'),
|
|
235
|
+
createPattern(SL, /`[^`]*\$\{[^}]+\}[^`]*`/g, 0.7, 'Template literal ${}'),
|
|
236
|
+
createPattern(SL, /require\s*\(\s*["'][\w./]+["']\s*\)/gi, 0.6, 'require()'),
|
|
237
|
+
createPattern(SL, /import\s+[\w{]+\s+from\s+["']/gi, 0.6, 'import from'),
|
|
238
|
+
createPattern(SL, /exec\s*\(\s*["']/gi, 0.85, 'exec('),
|
|
239
|
+
createPattern(SL, /system\s*\(\s*["']/gi, 0.9, 'system('),
|
|
240
|
+
createPattern(SL, /passthru\s*\(/gi, 0.85, 'passthru('),
|
|
241
|
+
createPattern(SL, /shell_exec\s*\(/gi, 0.9, 'shell_exec('),
|
|
242
|
+
createPattern(SL, /SELECT\s+.*\s+FROM\s+/gi, 0.6, 'SQL SELECT'),
|
|
243
|
+
createPattern(SL, /INSERT\s+INTO\s+/gi, 0.65, 'SQL INSERT'),
|
|
244
|
+
createPattern(SL, /DROP\s+(?:TABLE|DATABASE)/gi, 0.85, 'SQL DROP'),
|
|
245
|
+
createPattern(SL, /UNION\s+SELECT/gi, 0.85, 'SQL UNION SELECT'),
|
|
246
|
+
createPattern(SL, /;\s*--\s*$/gm, 0.7, 'SQL comment injection'),
|
|
247
|
+
createPattern(SL, /'\s*OR\s+'1'\s*=\s*'1/gi, 0.9, "SQL OR '1'='1"),
|
|
248
|
+
createPattern(SL, /<\?php\s+/gi, 0.85, 'PHP open tag'),
|
|
249
|
+
createPattern(SL, /<\?=\s*\$/gi, 0.8, 'PHP short echo'),
|
|
250
|
+
createPattern(SL, /<%[\w\s=]+%>/g, 0.75, 'ASP/ERB tag'),
|
|
251
|
+
createPattern(SL, /\$\{[^}]+\}/g, 0.65, 'Variable interpolation ${}'),
|
|
252
|
+
createPattern(SL, /process\.env\./gi, 0.6, 'process.env'),
|
|
253
|
+
createPattern(SL, /__dirname|__filename/gi, 0.6, 'Node __dirname'),
|
|
254
|
+
createPattern(SL, /child_process|spawn\s*\(/gi, 0.8, 'child_process/spawn'),
|
|
255
|
+
createPattern(SL, /fs\.(?:readFile|writeFile|unlink)\s*\(/gi, 0.7, 'fs read/write'),
|
|
256
|
+
createPattern(SL, /fetch\s*\(\s*["']?(?:http|data)/gi, 0.6, 'fetch URL'),
|
|
257
|
+
createPattern(SL, /XMLHttpRequest|axios\./gi, 0.6, 'XHR/axios'),
|
|
258
|
+
createPattern(SL, /WebSocket\s*\(/gi, 0.65, 'WebSocket('),
|
|
259
|
+
createPattern(SL, /postMessage\s*\(/gi, 0.65, 'postMessage('),
|
|
260
|
+
createPattern(SL, /localStorage\.|sessionStorage\./gi, 0.6, 'localStorage'),
|
|
261
|
+
createPattern(SL, /document\.cookie\s*=/gi, 0.8, 'document.cookie ='),
|
|
262
|
+
createPattern(SL, /atob\s*\(|btoa\s*\(/gi, 0.65, 'atob/btoa'),
|
|
263
|
+
createPattern(SL, /decodeURIComponent\s*\(/gi, 0.6, 'decodeURIComponent'),
|
|
264
|
+
createPattern(SL, /<style[^>]*>[\s\S]*?@import/gi, 0.75, 'style @import'),
|
|
265
|
+
createPattern(SL, /behavior\s*:\s*url\s*\(/gi, 0.75, 'CSS behavior:url'),
|
|
266
|
+
createPattern(SL, /-moz-binding\s*:/gi, 0.8, 'moz-binding'),
|
|
267
|
+
createPattern(SL, /<link[^>]*href\s*=\s*["']?\s*javascript/gi, 0.85, 'link href javascript'),
|
|
268
|
+
createPattern(SL, /<meta[^>]*http-equiv\s*=\s*["']?refresh/gi, 0.7, 'meta refresh'),
|
|
269
|
+
createPattern(SL, /<base\s+[^>]*href/gi, 0.75, 'base href'),
|
|
270
|
+
createPattern(SL, /<marquee\b/gi, 0.65, 'marquee tag'),
|
|
271
|
+
createPattern(SL, /<blink\b/gi, 0.7, 'blink tag'),
|
|
272
|
+
createPattern(SL, /<applet\b/gi, 0.8, 'applet tag'),
|
|
273
|
+
createPattern(SL, /<keygen\b/gi, 0.8, 'keygen tag'),
|
|
274
|
+
createPattern(SL, /<isindex\b/gi, 0.75, 'isindex tag'),
|
|
275
|
+
// ========== Hidden text / stealth ==========
|
|
276
|
+
createPattern(HT, /display\s*:\s*none/gi, 0.7, 'CSS display:none'),
|
|
277
|
+
createPattern(HT, /visibility\s*:\s*hidden/gi, 0.7, 'CSS visibility:hidden'),
|
|
278
|
+
createPattern(HT, /(?:font-size|opacity)\s*:\s*0\s*;?/gi, 0.6, 'Zero font-size/opacity'),
|
|
279
|
+
createPattern(HT, /(?:height|width)\s*:\s*0\s*px/gi, 0.6, 'Zero size'),
|
|
280
|
+
createPattern(HT, /left\s*:\s*-?\d+px/gi, 0.65, 'Off-screen left'),
|
|
281
|
+
createPattern(HT, /(?:text-indent|margin)\s*:\s*-9999/gi, 0.6, 'Hidden by indent/margin'),
|
|
282
|
+
createPattern(HT, /(?:aria-)?hidden\s*=\s*["']?true/gi, 0.7, 'hidden=true'),
|
|
283
|
+
createPattern(HT, /content\s*:\s*["']?\s*["']\s*;/gi, 0.6, 'Empty content (screen reader trick)'),
|
|
284
|
+
createPattern(HT, /(?:font-size|font)\s*:\s*0(?:px|em|rem)?\s*;?/gi, 0.65, 'Zero font'),
|
|
285
|
+
createPattern(HT, /(?:line-height|letter-spacing)\s*:\s*0\s*;?/gi, 0.6, 'Zero line-height'),
|
|
286
|
+
createPattern(HT, /(?:position\s*:\s*)?absolute\s*;[^}]*left\s*:\s*-9999/gi, 0.7, 'Absolute off-screen'),
|
|
287
|
+
createPattern(HT, /(?:clip|clip-path)\s*:\s*rect\s*\(\s*0/gi, 0.7, 'Clip rect(0)'),
|
|
288
|
+
createPattern(HT, /(?:overflow|text-overflow)\s*:\s*hidden/gi, 0.6, 'Overflow hidden'),
|
|
289
|
+
createPattern(HT, /(?:white-space|overflow)\s*:\s*(?:hidden|clip)/gi, 0.6, 'White-space hidden'),
|
|
290
|
+
createPattern(HT, /(?:color|background)\s*:\s*transparent\s*;?/gi, 0.55, 'Transparent color'),
|
|
291
|
+
createPattern(HT, /(?:color|fill)\s*:\s*#?\s*fff(?:fff)?\s*;?/gi, 0.55, 'White text'),
|
|
292
|
+
createPattern(HT, /(?:color)\s*:\s*#?\s*000(?:000)?\s*;?/gi, 0.5, 'Black text'),
|
|
293
|
+
createPattern(HT, /(?:opacity|filter)\s*:\s*0\s*;?/gi, 0.65, 'Opacity 0'),
|
|
294
|
+
createPattern(HT, /filter\s*:\s*opacity\s*\(\s*0\s*\)/gi, 0.65, 'Filter opacity(0)'),
|
|
295
|
+
createPattern(HT, /(?:z-index)\s*:\s*-?\d+/gi, 0.55, 'z-index negative'),
|
|
296
|
+
createPattern(HT, /(?:transform)\s*:\s*(?:scale|translate)\s*\(\s*0/gi, 0.65, 'Transform scale(0)'),
|
|
297
|
+
createPattern(HT, /(?:width|height)\s*:\s*1px\s*;?/gi, 0.6, '1px size'),
|
|
298
|
+
createPattern(HT, /(?:max-)?(?:width|height)\s*:\s*0\s*;?/gi, 0.65, 'Zero width/height'),
|
|
299
|
+
createPattern(HT, /(?:padding|margin)\s*:\s*0\s*;?/gi, 0.5, 'Zero padding'),
|
|
300
|
+
createPattern(HT, /(?:aria-)?hidden\s*=\s*["']?["']?/gi, 0.65, 'hidden attribute'),
|
|
301
|
+
createPattern(HT, /(?:role\s*=\s*["']?)?presentation["']?/gi, 0.6, 'role=presentation'),
|
|
302
|
+
createPattern(HT, /(?:tabindex)\s*=\s*-1/gi, 0.55, 'tabindex=-1'),
|
|
303
|
+
createPattern(HT, /(?:sr-only|screen-reader-only)/gi, 0.65, 'sr-only class'),
|
|
304
|
+
createPattern(HT, /(?:visually-hidden|visuallyhidden)/gi, 0.65, 'visually-hidden'),
|
|
305
|
+
createPattern(HT, /(?:invisible|offscreen)/gi, 0.6, 'invisible class'),
|
|
306
|
+
createPattern(HT, /\u200B|\u200C|\u200D|\uFEFF/g, 0.8, 'Zero-width character'),
|
|
307
|
+
createPattern(HT, /\u2060|\u2061|\u2062|\u2063/g, 0.75, 'Invisible operator'),
|
|
308
|
+
createPattern(HT, /\u034F|\u061C|\u115F|\u1160|\u17B4|\u17B5/g, 0.75, 'Combining/invisible'),
|
|
309
|
+
createPattern(HT, /(?:white\s+)?(?:space\s*:\s*)?nowrap/gi, 0.55, 'nowrap'),
|
|
310
|
+
createPattern(HT, /(?:text-decoration)\s*:\s*none\s*;?/gi, 0.5, 'text-decoration none'),
|
|
311
|
+
createPattern(HT, /(?:outline)\s*:\s*none\s*;?/gi, 0.5, 'outline none'),
|
|
312
|
+
createPattern(HT, /(?:border)\s*:\s*none\s*;?/gi, 0.5, 'border none'),
|
|
313
|
+
createPattern(HT, /(?:pointer-events)\s*:\s*none/gi, 0.55, 'pointer-events none'),
|
|
314
|
+
createPattern(HT, /(?:user-select)\s*:\s*none/gi, 0.55, 'user-select none'),
|
|
315
|
+
createPattern(HT, /(?:speak)\s*:\s*none/gi, 0.7, 'speak: none (a11y)'),
|
|
316
|
+
createPattern(HT, /(?:aria-)?(?:live)\s*=\s*["']?off/gi, 0.6, 'aria-live=off'),
|
|
317
|
+
createPattern(HT, /(?:content)\s*:\s*["']?\s*\\?\d+\s*["']?\s*;/gi, 0.65, 'Content escaped char'),
|
|
318
|
+
createPattern(HT, /(?:title)\s*=\s*["'][^"']*["']\s+style\s*=\s*["'][^"']*display\s*:\s*none/gi, 0.75, 'Title with hidden style'),
|
|
319
|
+
createPattern(HT, /<span[^>]*style\s*=\s*["'][^"']*font-size\s*:\s*0/gi, 0.7, 'span font-size 0'),
|
|
320
|
+
createPattern(HT, /<div[^>]*class\s*=\s*["'][^"']*(?:hidden|invisible)/gi, 0.65, 'div hidden class'),
|
|
321
|
+
];
|
|
322
|
+
return Object.freeze(patterns);
|
|
323
|
+
}
|
|
324
|
+
let cachedPatterns = null;
|
|
325
|
+
/** Returns default threat patterns (cached, frozen). */
|
|
326
|
+
export function getDefaultThreatPatterns() {
|
|
327
|
+
cachedPatterns ??= buildDefaultThreatPatterns();
|
|
328
|
+
return cachedPatterns;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Detects threats in content using the configured patterns.
|
|
332
|
+
* Pure, deterministic: same content → same PiDetection[] (order preserved by pattern order then by match position).
|
|
333
|
+
* Bounded by maxTotal and maxPerPattern to avoid runaway.
|
|
334
|
+
*
|
|
335
|
+
* @param content - Segment or string to scan
|
|
336
|
+
* @param options - Optional caps and pattern override
|
|
337
|
+
* @returns Array of PiDetection (frozen); empty if none
|
|
338
|
+
*/
|
|
339
|
+
export function detectThreats(content, options = {}) {
|
|
340
|
+
const maxTotal = Math.min(options.maxTotal ?? MAX_TOTAL_DETECTIONS, MAX_MATCHES);
|
|
341
|
+
const maxPerPattern = options.maxPerPattern ?? MAX_PER_PATTERN;
|
|
342
|
+
const patterns = options.patterns ?? getDefaultThreatPatterns();
|
|
343
|
+
if (typeof content !== 'string') {
|
|
344
|
+
throw new TypeError('detectThreats: content must be a string');
|
|
345
|
+
}
|
|
346
|
+
if (content.length === 0) {
|
|
347
|
+
return Object.freeze([]);
|
|
348
|
+
}
|
|
349
|
+
if (maxTotal <= 0 || patterns.length === 0) {
|
|
350
|
+
return Object.freeze([]);
|
|
351
|
+
}
|
|
352
|
+
const detections = [];
|
|
353
|
+
for (const pattern of patterns) {
|
|
354
|
+
if (detections.length >= maxTotal)
|
|
355
|
+
break;
|
|
356
|
+
const remaining = maxTotal - detections.length;
|
|
357
|
+
const cap = Math.min(maxPerPattern, remaining);
|
|
358
|
+
const matches = findAllMatches(pattern, content, cap);
|
|
359
|
+
for (const m of matches) {
|
|
360
|
+
if (m.matched.length === 0)
|
|
361
|
+
continue;
|
|
362
|
+
detections.push(createPiDetection(pattern.pattern_type, m.matched, m.position, pattern.base_confidence));
|
|
363
|
+
if (detections.length >= maxTotal)
|
|
364
|
+
break;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return Object.freeze(detections);
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../src/isl/detect/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/isl/detect/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/isl/detect/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,YAAY,EACb,MAAM,aAAa,CAAA"}
|
package/dist/isl/index.d.ts
CHANGED
|
@@ -11,10 +11,17 @@
|
|
|
11
11
|
* - A layer should never consume the internal "result" of another layer
|
|
12
12
|
*/
|
|
13
13
|
export { sanitize } from './sanitize.js';
|
|
14
|
+
export type { SanitizeOptions } from './sanitize.js';
|
|
14
15
|
export { buildISLResult, emitSignal } from './process/index.js';
|
|
16
|
+
export type { EmitSignalOptions } from './process/index.js';
|
|
17
|
+
export { detectThreats, getDefaultThreatPatterns, THREAT_TYPES } from './detect/index.js';
|
|
18
|
+
export type { DetectThreatsOptions, ThreatType } from './detect/index.js';
|
|
15
19
|
export { buildISLLineage } from './lineage/index.js';
|
|
16
|
-
export type { ISLSignal } from './signals.js';
|
|
20
|
+
export type { ISLSignal, ISLSignalMetadata } from './signals.js';
|
|
17
21
|
export { createISLSignal, isHighRiskSignal, isMediumRiskSignal, isLowRiskSignal } from './signals.js';
|
|
22
|
+
export { RiskScoreStrategy, getCalculator } from './riskScore/index.js';
|
|
23
|
+
export type { RiskScoreCalculator } from './riskScore/types.js';
|
|
24
|
+
export { maxConfidenceCalculator, severityPlusVolumeCalculator, weightedByTypeCalculator, defaultWeightedByTypeCalculator, DEFAULT_TYPE_WEIGHTS } from './riskScore/index.js';
|
|
18
25
|
export type { PiDetection, PiDetectionResult, Pattern, RiskScore } from './value-objects/index.js';
|
|
19
26
|
export { createPiDetection, getDetectionLength, isHighConfidence, isMediumConfidence, isLowConfidence, createPiDetectionResult, hasDetections, getDetectionCount, getDetectionsByType, getHighestConfidenceDetection, createPattern, matchesPattern, findMatch, MAX_CONTENT_LENGTH, MAX_PATTERN_LENGTH, MAX_MATCHES, createRiskScore, normalizeRiskScore, isHighRiskScore, isMediumRiskScore, isLowRiskScore, MIN_RISK_SCORE, MAX_RISK_SCORE } from './value-objects/index.js';
|
|
20
27
|
export { SanitizationError } from './exceptions/SanitizationError.js';
|
package/dist/isl/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/isl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/isl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAG3D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACzF,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,+BAA+B,EAC/B,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAG7B,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,6BAA6B,EAC7B,aAAa,EACb,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACf,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAGrE,YAAY,EACV,SAAS,IAAI,aAAa,EAC1B,UAAU,EACV,SAAS,EACV,MAAM,YAAY,CAAA"}
|
package/dist/isl/index.js
CHANGED
|
@@ -14,9 +14,14 @@
|
|
|
14
14
|
export { sanitize } from './sanitize.js';
|
|
15
15
|
// Process functions
|
|
16
16
|
export { buildISLResult, emitSignal } from './process/index.js';
|
|
17
|
+
// Detect - threat detection (pure, deterministic)
|
|
18
|
+
export { detectThreats, getDefaultThreatPatterns, THREAT_TYPES } from './detect/index.js';
|
|
17
19
|
// Lineage functions
|
|
18
20
|
export { buildISLLineage } from './lineage/index.js';
|
|
19
21
|
export { createISLSignal, isHighRiskSignal, isMediumRiskSignal, isLowRiskSignal } from './signals.js';
|
|
22
|
+
// Risk score strategy - registered calculators only (auditability, reproducibility)
|
|
23
|
+
export { RiskScoreStrategy, getCalculator } from './riskScore/index.js';
|
|
24
|
+
export { maxConfidenceCalculator, severityPlusVolumeCalculator, weightedByTypeCalculator, defaultWeightedByTypeCalculator, DEFAULT_TYPE_WEIGHTS } from './riskScore/index.js';
|
|
20
25
|
export { createPiDetection, getDetectionLength, isHighConfidence, isMediumConfidence, isLowConfidence, createPiDetectionResult, hasDetections, getDetectionCount, getDetectionsByType, getHighestConfidenceDetection, createPattern, matchesPattern, findMatch, MAX_CONTENT_LENGTH, MAX_PATTERN_LENGTH, MAX_MATCHES, createRiskScore, normalizeRiskScore, isHighRiskScore, isMediumRiskScore, isLowRiskScore, MIN_RISK_SCORE, MAX_RISK_SCORE } from './value-objects/index.js';
|
|
21
26
|
// Exceptions
|
|
22
27
|
export { SanitizationError } from './exceptions/SanitizationError.js';
|
package/dist/isl/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/isl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,sBAAsB;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/isl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,sBAAsB;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAG/D,kDAAkD;AAClD,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGzF,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIpD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,cAAc,CAAA;AAErB,oFAAoF;AACpF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEvE,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,+BAA+B,EAC/B,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,6BAA6B,EAC7B,aAAa,EACb,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACf,MAAM,0BAA0B,CAAA;AAEjC,aAAa;AACb,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA"}
|
|
@@ -2,22 +2,31 @@
|
|
|
2
2
|
* emitSignal - Emits an ISLSignal from an internal ISLResult
|
|
3
3
|
*
|
|
4
4
|
* @remarks
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - Create signal without exposing ISL internals
|
|
11
|
-
* - Add risk score and detections
|
|
5
|
+
* Converts ISLResult into a semantic signal (ISLSignal) for AAL/SDK.
|
|
6
|
+
* Aggregates all segment detections (from detectThreats → piDetection);
|
|
7
|
+
* hasThreats and riskScore are derived solely from that aggregation
|
|
8
|
+
* (no separate source of truth). Same ISLResult + same options → same ISLSignal (deterministic).
|
|
9
|
+
* Strategy is fixed at emit time; reflected in ISLSignal.metadata for auditability.
|
|
12
10
|
*/
|
|
13
11
|
import type { ISLResult } from '../types.js';
|
|
14
12
|
import type { ISLSignal } from '../signals.js';
|
|
13
|
+
import { RiskScoreStrategy } from '../riskScore/types.js';
|
|
14
|
+
/** Options for emitSignal. Strategy decided once; no per-segment or dynamic strategy. */
|
|
15
|
+
export interface EmitSignalOptions {
|
|
16
|
+
/** Signal timestamp (default: Date.now()) */
|
|
17
|
+
readonly timestamp?: number;
|
|
18
|
+
/** Risk score strategy and optional type weights (default: MAX_CONFIDENCE) */
|
|
19
|
+
readonly riskScore?: {
|
|
20
|
+
readonly strategy: RiskScoreStrategy;
|
|
21
|
+
readonly typeWeights?: Record<string, number>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
15
24
|
/**
|
|
16
25
|
* Emits an ISLSignal from an internal ISLResult
|
|
17
26
|
*
|
|
18
27
|
* @param islResult - Internal ISL result
|
|
19
|
-
* @param
|
|
20
|
-
* @returns ISLSignal - Semantic signal for external consumption
|
|
28
|
+
* @param options - Optional timestamp and risk score strategy (default: MAX_CONFIDENCE)
|
|
29
|
+
* @returns ISLSignal - Semantic signal for external consumption; metadata.strategy reflects strategy used
|
|
21
30
|
*/
|
|
22
|
-
export declare function emitSignal(islResult: ISLResult,
|
|
31
|
+
export declare function emitSignal(islResult: ISLResult, options?: EmitSignalOptions | number): ISLSignal;
|
|
23
32
|
//# sourceMappingURL=emitSignal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitSignal.d.ts","sourceRoot":"","sources":["../../../src/isl/process/emitSignal.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"emitSignal.d.ts","sourceRoot":"","sources":["../../../src/isl/process/emitSignal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAI9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAGzD,yFAAyF;AACzF,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;QACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC9C,CAAA;CACF;AAID;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,iBAAiB,GAAG,MAAW,GACvC,SAAS,CAsBX"}
|