@descryy/runtime-browser 0.5.2 → 0.5.3

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.
Files changed (45) hide show
  1. package/dist/browser-action-collector.d.ts +11 -3
  2. package/dist/browser-action-collector.d.ts.map +1 -1
  3. package/dist/browser-action-collector.js +102 -11
  4. package/dist/browser-action-collector.js.map +1 -1
  5. package/dist/browser-console-collector.d.ts +2 -0
  6. package/dist/browser-console-collector.d.ts.map +1 -1
  7. package/dist/browser-console-collector.js +60 -6
  8. package/dist/browser-console-collector.js.map +1 -1
  9. package/dist/browser-network-collector.d.ts +12 -1
  10. package/dist/browser-network-collector.d.ts.map +1 -1
  11. package/dist/browser-network-collector.js +167 -9
  12. package/dist/browser-network-collector.js.map +1 -1
  13. package/dist/browser-recording-collector.d.ts +8 -1
  14. package/dist/browser-recording-collector.d.ts.map +1 -1
  15. package/dist/browser-recording-collector.js +141 -17
  16. package/dist/browser-recording-collector.js.map +1 -1
  17. package/dist/browser-session.d.ts +131 -5
  18. package/dist/browser-session.d.ts.map +1 -1
  19. package/dist/browser-session.js +547 -95
  20. package/dist/browser-session.js.map +1 -1
  21. package/dist/dom-evidence.d.ts +6 -0
  22. package/dist/dom-evidence.d.ts.map +1 -1
  23. package/dist/dom-evidence.js +40 -11
  24. package/dist/dom-evidence.js.map +1 -1
  25. package/dist/frontend-initiator-capture.d.ts +5 -1
  26. package/dist/frontend-initiator-capture.d.ts.map +1 -1
  27. package/dist/frontend-initiator-capture.js +72 -10
  28. package/dist/frontend-initiator-capture.js.map +1 -1
  29. package/dist/index.d.ts +9 -8
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +7 -7
  32. package/dist/index.js.map +1 -1
  33. package/dist/network-correlation.d.ts +2 -11
  34. package/dist/network-correlation.d.ts.map +1 -1
  35. package/dist/network-correlation.js +1 -25
  36. package/dist/network-correlation.js.map +1 -1
  37. package/dist/script-url-mapping.d.ts +1 -0
  38. package/dist/script-url-mapping.d.ts.map +1 -1
  39. package/dist/script-url-mapping.js +7 -0
  40. package/dist/script-url-mapping.js.map +1 -1
  41. package/dist/secret-fields.d.ts +37 -0
  42. package/dist/secret-fields.d.ts.map +1 -0
  43. package/dist/secret-fields.js +121 -0
  44. package/dist/secret-fields.js.map +1 -0
  45. package/package.json +6 -6
@@ -0,0 +1,121 @@
1
+ export const SECRET_AUTOCOMPLETE_TOKENS = [
2
+ "current-password",
3
+ "new-password",
4
+ "one-time-code",
5
+ "cc-number",
6
+ "cc-csc",
7
+ "cc-exp",
8
+ "cc-exp-month",
9
+ "cc-exp-year",
10
+ "cc-name",
11
+ ];
12
+ export const SECRET_NAME_SUBSTRINGS = [
13
+ "token",
14
+ "secret",
15
+ "passw",
16
+ "passcode",
17
+ "apikey",
18
+ "api-key",
19
+ "api_key",
20
+ "api key",
21
+ "access-key",
22
+ "access_key",
23
+ "private-key",
24
+ "private_key",
25
+ "credential",
26
+ "csrf",
27
+ "xsrf",
28
+ "card-num",
29
+ "card_num",
30
+ "cardnum",
31
+ ];
32
+ export const SECRET_NAME_WORDS = ["otp", "pin", "ssn", "cvv", "cvc", "mfa", "2fa"];
33
+ const NAME_SUBSTRING_PATTERN = new RegExp(SECRET_NAME_SUBSTRINGS.map(escapeForPattern).join("|"), "i");
34
+ const NAME_WORD_PATTERN = new RegExp(`(^|[^a-z])(${SECRET_NAME_WORDS.map(escapeForPattern).join("|")})([^a-z]|$)`, "i");
35
+ function escapeForPattern(text) {
36
+ return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
37
+ }
38
+ function nameHintsAreSecret(hints) {
39
+ const joined = [hints.name, hints.id, hints.ariaLabel, hints.placeholder, hints.labelText].filter((part) => part !== null && part !== undefined).join(" ");
40
+ return joined !== "" && (NAME_SUBSTRING_PATTERN.test(joined) || NAME_WORD_PATTERN.test(joined));
41
+ }
42
+ export function isSecretInput(type, autocomplete, hints = {}) {
43
+ const normalizedType = (type ?? "").trim().toLowerCase();
44
+ if (normalizedType === "password" || normalizedType === "hidden")
45
+ return true;
46
+ const tokens = (autocomplete ?? "").toLowerCase().split(/\s+/).filter((token) => token !== "");
47
+ if (tokens.some((token) => SECRET_AUTOCOMPLETE_TOKENS.includes(token)))
48
+ return true;
49
+ return nameHintsAreSecret(hints);
50
+ }
51
+ export const SECRET_INPUT_MASK_SELECTORS = [
52
+ 'input[type="password" i]',
53
+ ...SECRET_AUTOCOMPLETE_TOKENS.map((token) => `input[autocomplete~="${token}" i]`),
54
+ ...SECRET_NAME_SUBSTRINGS.flatMap((keyword) => [`input[name*="${keyword}" i]`, `input[id*="${keyword}" i]`]),
55
+ ];
56
+ export const SECRET_SCAN_CONFIG = {
57
+ autocompleteTokens: SECRET_AUTOCOMPLETE_TOKENS,
58
+ nameSubstringPattern: NAME_SUBSTRING_PATTERN.source,
59
+ nameWordPattern: NAME_WORD_PATTERN.source,
60
+ };
61
+ export function scanForSecretInput(root, options) {
62
+ const config = options.config;
63
+ const isSecret = (el) => {
64
+ if (!el || !el.tagName)
65
+ return false;
66
+ const tag = el.tagName.toLowerCase();
67
+ if (tag !== "input" && tag !== "textarea")
68
+ return false;
69
+ const type = (el.getAttribute("type") || "").trim().toLowerCase();
70
+ if (type === "password" || type === "hidden")
71
+ return true;
72
+ const tokens = (el.getAttribute("autocomplete") || "").toLowerCase().split(/\s+/);
73
+ for (let i = 0; i < tokens.length; i += 1) {
74
+ if (tokens[i] !== "" && config.autocompleteTokens.indexOf(tokens[i]) !== -1)
75
+ return true;
76
+ }
77
+ let labelText = "";
78
+ const labels = el.labels;
79
+ if (labels) {
80
+ for (let j = 0; j < labels.length; j += 1)
81
+ labelText += " " + (labels[j].textContent || "");
82
+ }
83
+ const joined = [el.getAttribute("name"), el.getAttribute("id"), el.getAttribute("aria-label"), el.getAttribute("placeholder"), labelText]
84
+ .filter((part) => part !== null && part !== undefined && part !== "")
85
+ .join(" ");
86
+ if (joined === "")
87
+ return false;
88
+ return new RegExp(config.nameSubstringPattern, "i").test(joined) || new RegExp(config.nameWordPattern, "i").test(joined);
89
+ };
90
+ if (!options.filledOnly)
91
+ return isSecret(root);
92
+ const isFilledSecret = (candidate) => {
93
+ const tag = candidate.tagName.toLowerCase();
94
+ if ((tag !== "input" && tag !== "textarea") || (candidate.value || "") === "")
95
+ return false;
96
+ if ((candidate.getAttribute("type") || "").trim().toLowerCase() === "hidden")
97
+ return false;
98
+ return isSecret(candidate);
99
+ };
100
+ const pending = root === null ? [] : [root];
101
+ while (pending.length > 0) {
102
+ const current = pending.pop();
103
+ if (isFilledSecret(current))
104
+ return true;
105
+ const children = Array.prototype.slice.call(current.querySelectorAll("*"));
106
+ for (let i = 0; i < children.length; i += 1) {
107
+ const child = children[i];
108
+ if (isFilledSecret(child))
109
+ return true;
110
+ if (child.shadowRoot)
111
+ Array.prototype.push.apply(pending, Array.prototype.slice.call(child.shadowRoot.querySelectorAll("*")));
112
+ }
113
+ if (current.shadowRoot)
114
+ Array.prototype.push.apply(pending, Array.prototype.slice.call(current.shadowRoot.querySelectorAll("*")));
115
+ }
116
+ return false;
117
+ }
118
+ export function secretFieldPredicateSource() {
119
+ return `function (el) { return (${scanForSecretInput.toString()})(el, ${JSON.stringify({ config: SECRET_SCAN_CONFIG, filledOnly: false })}); }`;
120
+ }
121
+ //# sourceMappingURL=secret-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-fields.js","sourceRoot":"","sources":["../src/secret-fields.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descryy/runtime-browser",
3
- "version": "0.5.2",
3
+ "version": "0.5.3",
4
4
  "type": "module",
5
5
  "description": "Browser runtime: launch, isolated context, navigation, click/type/wait, DOM inspection, screenshots, console/page-error/network capture, all through the Collector contract (plan §7/§8). See documents/decisions-inbox/PROPOSAL-B-playwright-for-browser-runtime.md for the Playwright-vs-CDP call. BrowserSession.injectStorageState (0.4.5) is the mid-session counterpart to the launch-time auth seed -- lands cookies/localStorage into a session that is already open, for a scenario's sign-in step.",
6
6
  "license": "UNLICENSED",
@@ -26,14 +26,14 @@
26
26
  "access": "public"
27
27
  },
28
28
  "dependencies": {
29
- "@descryy/runtime-contracts": "0.4.0",
30
- "@descryy/runtime-backend-observation": "0.3.7",
29
+ "@descryy/runtime-contracts": "0.4.1",
30
+ "@descryy/runtime-backend-observation": "0.3.8",
31
31
  "playwright-core": "^1.62.1",
32
- "@descryy/runtime-adapter-typescript": "0.3.10"
32
+ "@descryy/runtime-adapter-typescript": "0.3.11"
33
33
  },
34
34
  "devDependencies": {
35
- "@descryy/runtime-controller": "0.4.0",
36
- "@descryy/runtime-evidence-store": "0.4.3"
35
+ "@descryy/runtime-controller": "0.4.1",
36
+ "@descryy/runtime-evidence-store": "0.4.4"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "tsc -b"