secure-ui-components 0.2.7 → 0.3.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/README.md +23 -25
- package/dist/components/secure-card/secure-card.d.ts.map +1 -1
- package/dist/components/secure-card/secure-card.js +1 -1
- package/dist/components/secure-card/secure-card.js.map +1 -1
- package/dist/components/secure-datetime/secure-datetime.js +1 -1
- package/dist/components/secure-datetime/secure-datetime.js.map +1 -1
- package/dist/components/secure-file-upload/secure-file-upload.js +1 -1
- package/dist/components/secure-form/secure-form.d.ts +1 -108
- package/dist/components/secure-form/secure-form.d.ts.map +1 -1
- package/dist/components/secure-form/secure-form.js +1 -33
- package/dist/components/secure-form/secure-form.js.map +1 -1
- package/dist/components/secure-input/secure-input.css +0 -13
- package/dist/components/secure-input/secure-input.d.ts +1 -112
- package/dist/components/secure-input/secure-input.d.ts.map +1 -1
- package/dist/components/secure-input/secure-input.js +1 -30
- package/dist/components/secure-input/secure-input.js.map +1 -1
- package/dist/components/secure-password-confirm/secure-password-confirm.d.ts +0 -1
- package/dist/components/secure-password-confirm/secure-password-confirm.d.ts.map +1 -1
- package/dist/components/secure-password-confirm/secure-password-confirm.js +1 -1
- package/dist/components/secure-password-confirm/secure-password-confirm.js.map +1 -1
- package/dist/components/secure-select/secure-select.d.ts +2 -132
- package/dist/components/secure-select/secure-select.d.ts.map +1 -1
- package/dist/components/secure-select/secure-select.js +1 -38
- package/dist/components/secure-select/secure-select.js.map +1 -1
- package/dist/components/secure-submit-button/secure-submit-button.d.ts +0 -46
- package/dist/components/secure-submit-button/secure-submit-button.d.ts.map +1 -1
- package/dist/components/secure-submit-button/secure-submit-button.js +1 -22
- package/dist/components/secure-submit-button/secure-submit-button.js.map +1 -1
- package/dist/components/secure-table/secure-table.d.ts +0 -51
- package/dist/components/secure-table/secure-table.d.ts.map +1 -1
- package/dist/components/secure-table/secure-table.js +25 -25
- package/dist/components/secure-table/secure-table.js.map +1 -1
- package/dist/components/secure-textarea/secure-textarea.css +0 -13
- package/dist/components/secure-textarea/secure-textarea.d.ts +1 -106
- package/dist/components/secure-textarea/secure-textarea.d.ts.map +1 -1
- package/dist/components/secure-textarea/secure-textarea.js +1 -30
- package/dist/components/secure-textarea/secure-textarea.js.map +1 -1
- package/dist/core/base-component.d.ts +9 -130
- package/dist/core/base-component.d.ts.map +1 -1
- package/dist/core/base-component.js +1 -18
- package/dist/core/base-component.js.map +1 -1
- package/dist/core/security-config.d.ts +6 -70
- package/dist/core/security-config.d.ts.map +1 -1
- package/dist/core/security-config.js +1 -16
- package/dist/core/security-config.js.map +1 -1
- package/dist/core/types.d.ts +27 -28
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +2 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -6
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/secure-ui.bundle.js +25 -218
- package/package.json +1 -5
|
@@ -1,128 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Secure Form Component
|
|
3
|
-
*
|
|
4
|
-
* A security-first form component that implements CSRF protection, automatic
|
|
5
|
-
* field collection, validation, and comprehensive audit logging.
|
|
6
|
-
*
|
|
7
|
-
* Progressive Enhancement Strategy:
|
|
8
|
-
* 1. Without JavaScript: Falls back to native HTML5 form submission
|
|
9
|
-
* 2. With JavaScript: Enhances with CSRF tokens, validation, secure submission
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* <secure-form
|
|
13
|
-
* security-tier="sensitive"
|
|
14
|
-
* action="/api/submit"
|
|
15
|
-
* method="POST"
|
|
16
|
-
* csrf-token="your-csrf-token"
|
|
17
|
-
* >
|
|
18
|
-
* <secure-input name="email" label="Email" required></secure-input>
|
|
19
|
-
* <button type="submit">Submit</button>
|
|
20
|
-
* </secure-form>
|
|
21
|
-
*
|
|
22
|
-
* Security Features:
|
|
23
|
-
* - CSRF token injection and validation
|
|
24
|
-
* - Automatic secure field collection
|
|
25
|
-
* - XSS prevention via sanitization
|
|
26
|
-
* - Rate limiting on submission
|
|
27
|
-
* - Comprehensive audit logging
|
|
28
|
-
* - Secure headers for form submission
|
|
29
|
-
* - Double-submit cookie pattern support
|
|
30
|
-
*
|
|
31
|
-
* @module secure-form
|
|
32
|
-
* @license MIT
|
|
33
|
-
*/
|
|
34
1
|
import type { SecurityTierValue } from '../../core/types.js';
|
|
35
|
-
/**
|
|
36
|
-
* Secure Form Web Component
|
|
37
|
-
*
|
|
38
|
-
* Provides a security-hardened form with CSRF protection and validation.
|
|
39
|
-
* The component works as a standard HTML form without JavaScript and
|
|
40
|
-
* enhances with security features when JavaScript is available.
|
|
41
|
-
*
|
|
42
|
-
* IMPORTANT: This component does NOT use Shadow DOM. It creates a native
|
|
43
|
-
* <form> element in light DOM to ensure proper form submission and
|
|
44
|
-
* accessibility. It extends HTMLElement directly, not SecureBaseComponent.
|
|
45
|
-
*
|
|
46
|
-
* @extends HTMLElement
|
|
47
|
-
*/
|
|
48
2
|
export declare class SecureForm extends HTMLElement {
|
|
49
3
|
#private;
|
|
50
|
-
/** @private Whether component styles have been added to the document */
|
|
51
|
-
static __stylesAdded: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Observed attributes for this component
|
|
54
|
-
*
|
|
55
|
-
* @static
|
|
56
|
-
*/
|
|
57
4
|
static get observedAttributes(): string[];
|
|
58
|
-
/**
|
|
59
|
-
* Constructor
|
|
60
|
-
*/
|
|
61
5
|
constructor();
|
|
62
|
-
/**
|
|
63
|
-
* Called when element is connected to DOM
|
|
64
|
-
*
|
|
65
|
-
* Progressive Enhancement Strategy:
|
|
66
|
-
* - Create a native <form> in light DOM (not Shadow DOM)
|
|
67
|
-
* - Move all children into the form
|
|
68
|
-
* - Add CSRF token as hidden field
|
|
69
|
-
* - Attach event listeners for validation and optional enhancement
|
|
70
|
-
*/
|
|
71
6
|
connectedCallback(): void;
|
|
72
|
-
/**
|
|
73
|
-
* Get form data
|
|
74
|
-
*
|
|
75
|
-
* @public
|
|
76
|
-
*/
|
|
77
7
|
getData(): Record<string, string>;
|
|
78
|
-
/**
|
|
79
|
-
* Reset the form
|
|
80
|
-
*
|
|
81
|
-
* @public
|
|
82
|
-
*/
|
|
83
8
|
reset(): void;
|
|
84
|
-
/**
|
|
85
|
-
* Programmatically submit the form
|
|
86
|
-
*
|
|
87
|
-
* @public
|
|
88
|
-
*/
|
|
89
9
|
submit(): void;
|
|
90
|
-
/**
|
|
91
|
-
* Check if form is valid
|
|
92
|
-
*
|
|
93
|
-
* @public
|
|
94
|
-
*/
|
|
95
10
|
get valid(): boolean;
|
|
96
|
-
/**
|
|
97
|
-
* Cleanup on disconnect
|
|
98
|
-
*/
|
|
99
11
|
disconnectedCallback(): void;
|
|
100
|
-
|
|
101
|
-
* Handle attribute changes
|
|
102
|
-
*/
|
|
103
|
-
attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
|
|
104
|
-
/**
|
|
105
|
-
* Get security tier
|
|
106
|
-
*/
|
|
12
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
107
13
|
get securityTier(): SecurityTierValue;
|
|
108
|
-
/**
|
|
109
|
-
* Sanitize a value to prevent XSS
|
|
110
|
-
*
|
|
111
|
-
* Uses the same div.textContent round-trip as SecureBaseComponent to correctly
|
|
112
|
-
* handle all injection vectors (attribute injection, entity encoding, etc).
|
|
113
|
-
*/
|
|
114
14
|
sanitizeValue(value: string): string;
|
|
115
|
-
/**
|
|
116
|
-
* Audit log helper
|
|
117
|
-
*/
|
|
118
15
|
audit(action: string, data: Record<string, unknown>): void;
|
|
119
|
-
/**
|
|
120
|
-
* Check rate limit (stub - implement proper rate limiting in production)
|
|
121
|
-
*/
|
|
122
16
|
checkRateLimit(): {
|
|
123
17
|
allowed: boolean;
|
|
124
18
|
retryAfter: number;
|
|
125
19
|
};
|
|
126
20
|
}
|
|
127
|
-
export default SecureForm;
|
|
128
21
|
//# sourceMappingURL=secure-form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-form.d.ts","sourceRoot":"","sources":["../../../src/components/secure-form/secure-form.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secure-form.d.ts","sourceRoot":"","sources":["../../../src/components/secure-form/secure-form.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAKlB,MAAM,qBAAqB,CAAC;AAI7B,qBAAa,UAAW,SAAQ,WAAW;;IAiBzC,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAWxC;;IAMD,iBAAiB,IAAI,IAAI;IA2kBzB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIjC,KAAK,IAAI,IAAI;IAWb,MAAM,IAAI,IAAI;IAMd,IAAI,KAAK,IAAI,OAAO,CAGnB;IAED,oBAAoB,IAAI,IAAI;IAO5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IA6B9F,IAAI,YAAY,IAAI,iBAAiB,CAEpC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOpC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM1D,cAAc,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAsB3D"}
|
|
@@ -1,33 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* @fileoverview Secure Form Component
|
|
3
|
-
*
|
|
4
|
-
* A security-first form component that implements CSRF protection, automatic
|
|
5
|
-
* field collection, validation, and comprehensive audit logging.
|
|
6
|
-
*
|
|
7
|
-
* Progressive Enhancement Strategy:
|
|
8
|
-
* 1. Without JavaScript: Falls back to native HTML5 form submission
|
|
9
|
-
* 2. With JavaScript: Enhances with CSRF tokens, validation, secure submission
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* <secure-form
|
|
13
|
-
* security-tier="sensitive"
|
|
14
|
-
* action="/api/submit"
|
|
15
|
-
* method="POST"
|
|
16
|
-
* csrf-token="your-csrf-token"
|
|
17
|
-
* >
|
|
18
|
-
* <secure-input name="email" label="Email" required></secure-input>
|
|
19
|
-
* <button type="submit">Submit</button>
|
|
20
|
-
* </secure-form>
|
|
21
|
-
*
|
|
22
|
-
* Security Features:
|
|
23
|
-
* - CSRF token injection and validation
|
|
24
|
-
* - Automatic secure field collection
|
|
25
|
-
* - XSS prevention via sanitization
|
|
26
|
-
* - Rate limiting on submission
|
|
27
|
-
* - Comprehensive audit logging
|
|
28
|
-
* - Secure headers for form submission
|
|
29
|
-
* - Double-submit cookie pattern support
|
|
30
|
-
*
|
|
31
|
-
* @module secure-form
|
|
32
|
-
* @license MIT
|
|
33
|
-
*/var d;import{SecurityTier as l}from"../../core/security-config.js";class m extends HTMLElement{static __stylesAdded=!1;#t=null;#e=null;#i=null;#n=!1;#l=Date.now();#s=`secure-form-${Math.random().toString(36).substring(2,11)}`;#r=l.PUBLIC;static get observedAttributes(){return["security-tier","action","method","enctype","csrf-token","csrf-header-name","csrf-field-name","novalidate"]}constructor(){super()}connectedCallback(){if(this.#t)return;this.#l=Date.now();const t=this.getAttribute("security-tier");t&&(this.#r=t);const s=this.querySelector("form");if(s){this.#t=s,this.#t.id=this.#s,this.#t.classList.contains("secure-form")||this.#t.classList.add("secure-form"),this.#u();const e=this.getAttribute("csrf-field-name")||"csrf_token",i=s.querySelector(`input[name="${e}"]`);if(i){this.#e=i;const r=this.getAttribute("csrf-token");r&&i.value!==r&&(i.value=r)}else this.#h()}else{for(this.#t=document.createElement("form"),this.#t.id=this.#s,this.#t.className="secure-form",this.#u(),this.#h();this.firstChild;)this.#t.appendChild(this.firstChild);this.appendChild(this.#t)}this.#i=document.createElement("div"),this.#i.className="form-status form-status-hidden",this.#i.setAttribute("role","status"),this.#i.setAttribute("aria-live","polite"),this.#t.insertBefore(this.#i,this.#t.firstChild),this.#p(),this.#b(),this.audit("form_initialized",{formId:this.#s,action:this.#t.action,method:this.#t.method})}#p(){if(!d.__stylesAdded){const t=new URL("./secure-form.css",import.meta.url).href;if(t.includes("{")){const s=new CSSStyleSheet;s.replaceSync(t),document.adoptedStyleSheets=[...document.adoptedStyleSheets,s]}else{const s=document.createElement("link");s.rel="stylesheet",s.href=t,document.head.appendChild(s)}d.__stylesAdded=!0}}#u(){const t=this.getAttribute("action");t&&(this.#t.action=t);const s=this.getAttribute("method")||"POST";this.#t.method=s.toUpperCase();const e=this.getAttribute("enctype")||"application/x-www-form-urlencoded";this.#t.enctype=e,this.hasAttribute("novalidate")&&(this.#t.noValidate=!0),(this.#r===l.SENSITIVE||this.#r===l.CRITICAL)&&(this.#t.autocomplete="off")}#h(){const t=this.getAttribute("csrf-token");if(t){this.#e=document.createElement("input"),this.#e.type="hidden";const s=this.getAttribute("csrf-field-name")||"csrf_token";this.#e.name=s,this.#e.value=t,this.#t.appendChild(this.#e),this.audit("csrf_token_injected",{formId:this.#s,fieldName:s})}else(this.securityTier===l.SENSITIVE||this.securityTier===l.CRITICAL)&&console.warn("CSRF token not provided for SENSITIVE/CRITICAL tier form")}#b(){this.#t.addEventListener("submit",t=>{this.#y(t)}),this.addEventListener("secure-input",t=>{this.#o(t)}),this.addEventListener("secure-textarea",t=>{this.#o(t)}),this.addEventListener("secure-select",t=>{this.#o(t)})}#o(t){this.#f()}async#y(t){const s=this.hasAttribute("enhance");if(this.#n){t.preventDefault();return}(this.#r===l.SENSITIVE||this.#r===l.CRITICAL)&&!this.#e?.value&&this.dispatchEvent(new CustomEvent("secure-threat-detected",{detail:{fieldName:this.#s,threatType:"csrf-token-absent",patternId:"csrf-token-absent",tier:this.#r,timestamp:Date.now()},bubbles:!0,composed:!0}));const e=this.checkRateLimit();if(!e.allowed){t.preventDefault(),this.#a(`Too many submission attempts. Please wait ${Math.ceil(e.retryAfter/1e3)} seconds.`,"error"),this.audit("form_rate_limited",{formId:this.#s,retryAfter:e.retryAfter});return}const i=this.#d();if(!i.valid){t.preventDefault(),this.#a(i.errors.join(", "),"error"),this.audit("form_validation_failed",{formId:this.#s,errors:i.errors});return}if(!s){this.#g(),this.audit("form_submitted_native",{formId:this.#s,action:this.#t.action,method:this.#t.method});return}t.preventDefault(),this.#n=!0,this.#a("Submitting...","info"),this.#S();const r=this.#m(),a=this.#A();this.audit("form_submitted_enhanced",{formId:this.#s,action:this.#t.action,method:this.#t.method,fieldCount:Object.keys(r).length,riskScore:a.riskScore,riskSignals:a.riskSignals});const c=new CustomEvent("secure-form-submit",{detail:{formData:r,formElement:this.#t,telemetry:a,preventDefault:()=>{this.#n=!1,this.#c()}},bubbles:!0,composed:!0,cancelable:!0});if(!this.dispatchEvent(c)){this.#n=!1,this.#c();return}try{await this.#v(r,a)}catch(u){this.#a("Submission failed. Please try again.","error"),this.audit("form_submission_error",{formId:this.#s,error:u.message})}finally{this.#n=!1,this.#c()}}#g(){this.#t.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(s=>{const e=s.getAttribute("name");if(!e)return;s.querySelectorAll(`input[name="${e}"], textarea[name="${e}"], select[name="${e}"]`).forEach(a=>{a.removeAttribute("name")});let r=this.#t.querySelector(`input[type="hidden"][data-secure-input="${e}"]`);r||(r=document.createElement("input"),r.type="hidden",r.setAttribute("data-secure-input",e),r.name=e,this.#t.appendChild(r)),r.value=s.value||""})}#d(){const t=[];return this.#t.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(e=>{if(typeof e.valid=="boolean"&&!e.valid){const i=e.getAttribute("label")||e.getAttribute("name")||"Field";t.push(`${i} is invalid`)}}),{valid:t.length===0,errors:t}}#m(){const t=Object.create(null);return this.#t.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(i=>{const r=i;r.name&&(t[r.name]=r.value)}),this.#t.querySelectorAll('input:not([type="hidden"]), textarea:not(.textarea-field), select:not(.select-field)').forEach(i=>{const r=i;r.name&&(t[r.name]=this.sanitizeValue(r.value))}),this.#e&&(t[this.#e.name]=this.#e.value),t}async#v(t,s){const e=this.#t.action,i=this.#t.method,r={"Content-Type":"application/json"},a=this.getAttribute("csrf-header-name");a&&this.#e&&(r[a]=this.#e.value);const c={...t,_telemetry:s},o=await fetch(e,{method:i,headers:r,body:JSON.stringify(c),credentials:"same-origin",mode:"cors",cache:"no-cache",redirect:"follow"});if(!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);return this.#a("Form submitted successfully!","success"),this.dispatchEvent(new CustomEvent("secure-form-success",{detail:{formData:t,response:o,telemetry:s},bubbles:!0,composed:!0})),o}#S(){this.#t.querySelectorAll("input, textarea, select, button").forEach(e=>{e.disabled=!0}),this.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(e=>{e.setAttribute("disabled","")})}#c(){this.#t.querySelectorAll("input, textarea, select, button").forEach(e=>{e.disabled=!1}),this.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(e=>{e.removeAttribute("disabled")})}#a(t,s="info"){this.#i.textContent=t,this.#i.className=`form-status form-status-${s}`}#f(){this.#i.textContent="",this.#i.className="form-status form-status-hidden"}#A(){const s=this.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-card"),e=[];s.forEach(c=>{const o=c;if(typeof o.getFieldTelemetry!="function")return;const u=c.getAttribute("name")??c.tagName.toLowerCase(),h={...o.getFieldTelemetry(),fieldName:u,fieldType:c.tagName.toLowerCase()};e.push(h)});const i=Date.now()-this.#l,{riskScore:r,riskSignals:a}=this.#C(e,i);return{sessionDuration:i,fieldCount:e.length,fields:e,riskScore:r,riskSignals:a,submittedAt:new Date().toISOString()}}#C(t,s){const e=[];let i=0;if(s<3e3?(i+=30,e.push("session_too_fast")):s<8e3&&(i+=10,e.push("session_fast")),t.length===0)return{riskScore:Math.min(i,100),riskSignals:e};t.every(n=>n.pasteDetected&&n.velocity===0)&&(i+=25,e.push("all_fields_pasted")),t.some(n=>n.velocity>15)&&(i+=15,e.push("high_velocity_typing")),t.some(n=>n.focusCount===0)&&(i+=15,e.push("field_filled_without_focus")),t.some(n=>n.focusCount>1&&n.blurWithoutChange>1)&&(i+=10,e.push("form_probing")),t.some(n=>n.corrections>5)&&(i+=5,e.push("high_correction_count"));const h=t.filter(n=>n.autofillDetected);return h.length>0&&h.length===t.length&&(i-=10,e.push("autofill_detected")),{riskScore:Math.max(0,Math.min(i,100)),riskSignals:e}}getData(){return this.#m()}reset(){this.#t&&(this.#t.reset(),this.#f(),this.audit("form_reset",{formId:this.#s}))}submit(){this.#t&&this.#t.dispatchEvent(new Event("submit",{bubbles:!0,cancelable:!0}))}get valid(){return this.#d().valid}disconnectedCallback(){this.#t&&this.#t.reset()}attributeChangedCallback(t,s,e){if(this.#t)switch(t){case"security-tier":this.#r=e||l.PUBLIC;break;case"action":this.#t.action=e;break;case"method":this.#t.method=e;break;case"csrf-token":this.#e&&(this.#e.value=e);break}}get securityTier(){return this.#r}sanitizeValue(t){if(typeof t!="string")return"";const s=document.createElement("div");return s.textContent=t,s.innerHTML}audit(t,s){console.debug&&console.debug(`[secure-form] ${t}`,s)}checkRateLimit(){return{allowed:!0,retryAfter:0}}}d=m,customElements.define("secure-form",m);var b=m;export{m as SecureForm,b as default};
|
|
1
|
+
var d;import{SecurityTier as l,TIER_CONFIG as f,isValidTier as p}from"../../core/security-config.js";class m extends HTMLElement{static#u=!1;#t=null;#e=null;#i=null;#a=!1;#d=Date.now();#n={attempts:0,windowStart:Date.now()};#s=`secure-form-${Math.random().toString(36).substring(2,11)}`;#r=l.PUBLIC;static get observedAttributes(){return["security-tier","action","method","enctype","csrf-token","csrf-header-name","csrf-field-name","novalidate"]}constructor(){super()}connectedCallback(){if(this.#t)return;this.#d=Date.now();const t=this.getAttribute("security-tier");t&&p(t)&&(this.#r=t);const s=this.querySelector("form");if(s){this.#t=s,this.#t.id=this.#s,this.#t.classList.contains("secure-form")||this.#t.classList.add("secure-form"),this.#m();const e=this.getAttribute("csrf-field-name")||"csrf_token",i=s.querySelector(`input[name="${CSS.escape(e)}"]`);if(i){this.#e=i;const r=this.getAttribute("csrf-token");r&&i.value!==r&&(i.value=r)}else this.#f()}else{for(this.#t=document.createElement("form"),this.#t.id=this.#s,this.#t.className="secure-form",this.#m(),this.#f();this.firstChild;)this.#t.appendChild(this.firstChild);this.appendChild(this.#t)}this.#i=document.createElement("div"),this.#i.className="form-status form-status-hidden",this.#i.setAttribute("role","status"),this.#i.setAttribute("aria-live","polite"),this.#t.insertBefore(this.#i,this.#t.firstChild),this.#g(),this.#S(),this.audit("form_initialized",{formId:this.#s,action:this.#t.action,method:this.#t.method})}#g(){if(!d.#u){const t=new URL("./secure-form.css",import.meta.url).href;if(t.includes("{")){const s=new CSSStyleSheet;s.replaceSync(t),document.adoptedStyleSheets=[...document.adoptedStyleSheets,s]}else{const s=document.createElement("link");s.rel="stylesheet",s.href=t,document.head.appendChild(s)}d.#u=!0}}#m(){const t=this.getAttribute("action");t&&(this.#t.action=t);const s=this.getAttribute("method")||"POST";this.#t.method=s.toUpperCase();const e=this.getAttribute("enctype")||"application/x-www-form-urlencoded";this.#t.enctype=e,this.hasAttribute("novalidate")&&(this.#t.noValidate=!0),(this.#r===l.SENSITIVE||this.#r===l.CRITICAL)&&(this.#t.autocomplete="off")}#f(){const t=this.getAttribute("csrf-token");if(t){this.#e=document.createElement("input"),this.#e.type="hidden";const s=this.getAttribute("csrf-field-name")||"csrf_token";this.#e.name=s,this.#e.value=t,this.#t.appendChild(this.#e),this.audit("csrf_token_injected",{formId:this.#s,fieldName:s})}else(this.securityTier===l.SENSITIVE||this.securityTier===l.CRITICAL)&&console.warn("CSRF token not provided for SENSITIVE/CRITICAL tier form")}#S(){this.#t.addEventListener("submit",t=>{this.#v(t)}),this.addEventListener("secure-input-change",t=>{this.#l(t)}),this.addEventListener("secure-textarea-change",t=>{this.#l(t)}),this.addEventListener("secure-select-change",t=>{this.#l(t)})}#l(t){this.#y()}async#v(t){const s=this.hasAttribute("use-fetch");if(this.#a){t.preventDefault();return}(this.#r===l.SENSITIVE||this.#r===l.CRITICAL)&&!this.#e?.value&&this.dispatchEvent(new CustomEvent("secure-threat-detected",{detail:{fieldName:this.#s,threatType:"csrf-token-absent",patternId:"csrf-token-absent",tier:this.#r,timestamp:Date.now()},bubbles:!0,composed:!0}));const e=this.checkRateLimit();if(!e.allowed){t.preventDefault(),this.#o(`Too many submission attempts. Please wait ${Math.ceil(e.retryAfter/1e3)} seconds.`,"error"),this.audit("form_rate_limited",{formId:this.#s,retryAfter:e.retryAfter});return}const i=this.#p();if(!i.valid){t.preventDefault(),this.#o(i.errors.join(", "),"error"),this.audit("form_validation_failed",{formId:this.#s,errors:i.errors});return}if(!s){this.#A(),this.audit("form_submitted_native",{formId:this.#s,action:this.#t.action,method:this.#t.method});return}t.preventDefault(),this.#a=!0,this.#o("Submitting...","info"),this.#E();const r=this.#b(),a=this.#w();this.audit("form_submitted_enhanced",{formId:this.#s,action:this.#t.action,method:this.#t.method,fieldCount:Object.keys(r).length,riskScore:a.riskScore,riskSignals:a.riskSignals});const c=new CustomEvent("secure-form-submit",{detail:{formData:r,telemetry:a,cancelSubmission:()=>{this.#a=!1,this.#h()}},bubbles:!0,composed:!0,cancelable:!0});if(!this.dispatchEvent(c)){this.#a=!1,this.#h();return}try{await this.#C(r,a)}catch(h){this.#o("Submission failed. Please try again.","error"),this.audit("form_submission_error",{formId:this.#s,error:h.message})}finally{this.#a=!1,this.#h()}}#A(){this.#t.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(s=>{const e=s.getAttribute("name");if(!e)return;s.querySelectorAll(`input[name="${e}"], textarea[name="${e}"], select[name="${e}"]`).forEach(a=>{a.removeAttribute("name")});let r=this.#t.querySelector(`input[type="hidden"][data-secure-input="${e}"]`);r||(r=document.createElement("input"),r.type="hidden",r.setAttribute("data-secure-input",e),r.name=e,this.#t.appendChild(r)),r.value=s.value||""})}#p(){const t=[];return this.#t.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(e=>{if(typeof e.valid=="boolean"&&!e.valid){const i=e.getAttribute("label")||e.getAttribute("name")||"Field";t.push(`${i} is invalid`)}}),{valid:t.length===0,errors:t}}#b(){const t=Object.create(null);return this.#t.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(i=>{const r=i;r.name&&(t[r.name]=r.value)}),this.#t.querySelectorAll('input:not([type="hidden"]), textarea, select').forEach(i=>{const r=i;r.name&&(t[r.name]=this.sanitizeValue(r.value))}),this.#e&&(t[this.#e.name]=this.#e.value),t}#c=null;async#C(t,s){this.#c?.abort(),this.#c=new AbortController;const e=this.#t.action,i=this.#t.method,r={"Content-Type":"application/json"},a=this.getAttribute("csrf-header-name");a&&this.#e&&(r[a]=this.#e.value);const c={...t,_telemetry:s},o=await fetch(e,{method:i,headers:r,body:JSON.stringify(c),credentials:"same-origin",mode:"cors",cache:"no-cache",redirect:"follow",signal:this.#c.signal});if(!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);return this.#o("Form submitted successfully!","success"),this.dispatchEvent(new CustomEvent("secure-form-success",{detail:{formData:t,response:o,telemetry:s},bubbles:!0,composed:!0})),o}#E(){this.#t.querySelectorAll("input, textarea, select, button").forEach(e=>{e.disabled=!0}),this.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(e=>{e.setAttribute("disabled","")})}#h(){this.#t.querySelectorAll("input, textarea, select, button").forEach(e=>{e.disabled=!1}),this.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-file-upload").forEach(e=>{e.removeAttribute("disabled")})}#o(t,s="info"){this.#i.textContent=t,this.#i.className=`form-status form-status-${s}`}#y(){this.#i.textContent="",this.#i.className="form-status form-status-hidden"}#w(){const s=this.querySelectorAll("secure-input, secure-textarea, secure-select, secure-datetime, secure-card"),e=[];s.forEach(c=>{const o=c;if(typeof o.getFieldTelemetry!="function")return;const h=c.getAttribute("name")??c.tagName.toLowerCase(),u={...o.getFieldTelemetry(),fieldName:h,fieldType:c.tagName.toLowerCase()};e.push(u)});const i=Date.now()-this.#d,{riskScore:r,riskSignals:a}=this.#I(e,i);return{sessionDuration:i,fieldCount:e.length,fields:e,riskScore:r,riskSignals:a,submittedAt:new Date().toISOString()}}#I(t,s){const e=[];let i=0;if(s<3e3?(i+=30,e.push("session_too_fast")):s<8e3&&(i+=10,e.push("session_fast")),t.length===0)return{riskScore:Math.min(i,100),riskSignals:e};t.every(n=>n.pasteDetected&&n.velocity===0)&&(i+=25,e.push("all_fields_pasted")),t.some(n=>n.velocity>15)&&(i+=15,e.push("high_velocity_typing")),t.some(n=>n.focusCount===0)&&(i+=15,e.push("field_filled_without_focus")),t.some(n=>n.focusCount>1&&n.blurWithoutChange>1)&&(i+=10,e.push("form_probing")),t.some(n=>n.corrections>5)&&(i+=5,e.push("high_correction_count"));const u=t.filter(n=>n.autofillDetected);return u.length>0&&u.length===t.length&&(i-=10,e.push("autofill_detected")),{riskScore:Math.max(0,Math.min(i,100)),riskSignals:e}}getData(){return this.#b()}reset(){this.#t&&(this.#t.reset(),this.#y(),this.audit("form_reset",{formId:this.#s}))}submit(){this.#t&&this.#t.dispatchEvent(new Event("submit",{bubbles:!0,cancelable:!0}))}get valid(){return this.#p().valid}disconnectedCallback(){this.#c?.abort(),this.#t&&this.#t.reset()}attributeChangedCallback(t,s,e){if(this.#t)switch(t){case"security-tier":console.warn(`SecureForm: security-tier cannot be changed after initialization. Attempted change from "${s}" to "${e}" blocked.`);return;case"action":this.#t.action=e;break;case"method":this.#t.method=e;break;case"csrf-token":this.#e&&(this.#e.value=e);break}}get securityTier(){return this.#r}sanitizeValue(t){if(typeof t!="string")return"";const s=document.createElement("div");return s.textContent=t,s.innerHTML}audit(t,s){console.debug&&console.debug(`[secure-form] ${t}`,s)}checkRateLimit(){const t=f[this.#r];if(!t.rateLimit.enabled)return{allowed:!0,retryAfter:0};const{maxAttempts:s,windowMs:e}=t.rateLimit,i=Date.now();return i-this.#n.windowStart>e&&(this.#n.attempts=0,this.#n.windowStart=i),this.#n.attempts>=s?{allowed:!1,retryAfter:e-(i-this.#n.windowStart)}:(this.#n.attempts++,{allowed:!0,retryAfter:0})}}d=m,customElements.define("secure-form",m);export{m as SecureForm};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-form.js","sourceRoot":"","sources":["../../../src/components/secure-form/secure-form.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secure-form.js","sourceRoot":"","sources":["../../../src/components/secure-form/secure-form.ts"],"names":[],"mappings":"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"}
|
|
@@ -170,19 +170,6 @@ label {
|
|
|
170
170
|
white-space: nowrap;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
.threat-tier {
|
|
174
|
-
display: inline-block;
|
|
175
|
-
padding: var(--secure-ui-badge-padding);
|
|
176
|
-
font-size: var(--secure-ui-badge-font-size);
|
|
177
|
-
font-weight: var(--secure-ui-font-weight-semibold);
|
|
178
|
-
border-radius: var(--secure-ui-badge-border-radius);
|
|
179
|
-
background-color: var(--secure-ui-color-bg-tertiary);
|
|
180
|
-
color: var(--secure-ui-color-text-secondary);
|
|
181
|
-
border: var(--secure-ui-border-width-thin) solid var(--secure-ui-color-border);
|
|
182
|
-
text-transform: uppercase;
|
|
183
|
-
white-space: nowrap;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
173
|
/* Threat state on the input field */
|
|
187
174
|
.input-field.threat {
|
|
188
175
|
border-color: var(--secure-ui-color-warning) !important;
|
|
@@ -1,128 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Secure Input Component
|
|
3
|
-
*
|
|
4
|
-
* A security-first input field component that implements progressive enhancement,
|
|
5
|
-
* tier-based validation, masking, and audit logging.
|
|
6
|
-
*
|
|
7
|
-
* Progressive Enhancement Strategy:
|
|
8
|
-
* 1. Without JavaScript: Falls back to native HTML5 input with attributes
|
|
9
|
-
* 2. With JavaScript: Enhances with masking, real-time validation, rate limiting
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* <secure-input
|
|
13
|
-
* security-tier="critical"
|
|
14
|
-
* name="password"
|
|
15
|
-
* label="Password"
|
|
16
|
-
* type="password"
|
|
17
|
-
* required
|
|
18
|
-
* ></secure-input>
|
|
19
|
-
*
|
|
20
|
-
* Security Features:
|
|
21
|
-
* - XSS prevention via sanitization
|
|
22
|
-
* - Configurable masking based on security tier
|
|
23
|
-
* - Rate limiting for sensitive/critical tiers
|
|
24
|
-
* - Autocomplete control based on tier
|
|
25
|
-
* - Comprehensive audit logging
|
|
26
|
-
* - Visual security indicators
|
|
27
|
-
*
|
|
28
|
-
* @module secure-input
|
|
29
|
-
* @license MIT
|
|
30
|
-
*/
|
|
31
1
|
import { SecureBaseComponent } from '../../core/base-component.js';
|
|
32
|
-
import type { SecurityTierValue } from '../../core/types.js';
|
|
33
|
-
/**
|
|
34
|
-
* Secure Input Web Component
|
|
35
|
-
*
|
|
36
|
-
* Provides a security-hardened input field with progressive enhancement.
|
|
37
|
-
* The component works as a standard form input without JavaScript and
|
|
38
|
-
* enhances with security features when JavaScript is available.
|
|
39
|
-
*
|
|
40
|
-
* @extends SecureBaseComponent
|
|
41
|
-
*/
|
|
42
2
|
export declare class SecureInput extends SecureBaseComponent {
|
|
43
3
|
#private;
|
|
44
|
-
/**
|
|
45
|
-
* Observed attributes for this component
|
|
46
|
-
*
|
|
47
|
-
* @static
|
|
48
|
-
*/
|
|
49
4
|
static get observedAttributes(): string[];
|
|
50
|
-
/**
|
|
51
|
-
* Constructor
|
|
52
|
-
*/
|
|
53
|
-
constructor();
|
|
54
|
-
/**
|
|
55
|
-
* Render the input component
|
|
56
|
-
*
|
|
57
|
-
* Security Note: We use a native <input> element wrapped in our web component
|
|
58
|
-
* to ensure progressive enhancement. The native input works without JavaScript,
|
|
59
|
-
* and we enhance it with security features when JS is available.
|
|
60
|
-
*
|
|
61
|
-
* @protected
|
|
62
|
-
*/
|
|
63
5
|
protected render(): DocumentFragment | HTMLElement | null;
|
|
64
|
-
/**
|
|
65
|
-
* Handle attribute changes
|
|
66
|
-
*
|
|
67
|
-
* @protected
|
|
68
|
-
*/
|
|
69
6
|
protected handleAttributeChange(name: string, _oldValue: string | null, newValue: string | null): void;
|
|
70
|
-
/**
|
|
71
|
-
* Get the current value (unmasked)
|
|
72
|
-
*
|
|
73
|
-
* Security Note: This exposes the actual value. Only call this when
|
|
74
|
-
* submitting the form or when you have proper authorization.
|
|
75
|
-
*
|
|
76
|
-
* @public
|
|
77
|
-
*/
|
|
78
7
|
get value(): string;
|
|
79
|
-
/**
|
|
80
|
-
* Set the value
|
|
81
|
-
*
|
|
82
|
-
* @public
|
|
83
|
-
*/
|
|
84
8
|
set value(value: string);
|
|
85
|
-
/**
|
|
86
|
-
* Get the input name
|
|
87
|
-
*
|
|
88
|
-
* @public
|
|
89
|
-
*/
|
|
90
9
|
get name(): string;
|
|
91
|
-
/**
|
|
92
|
-
* Check if the input is valid
|
|
93
|
-
*
|
|
94
|
-
* @public
|
|
95
|
-
*/
|
|
96
10
|
get valid(): boolean;
|
|
97
|
-
/**
|
|
98
|
-
* Focus the input
|
|
99
|
-
*
|
|
100
|
-
* @public
|
|
101
|
-
*/
|
|
102
11
|
focus(): void;
|
|
103
|
-
/**
|
|
104
|
-
* Blur the input
|
|
105
|
-
*
|
|
106
|
-
* @public
|
|
107
|
-
*/
|
|
108
12
|
blur(): void;
|
|
109
|
-
|
|
110
|
-
* Show inline threat feedback inside the component's shadow DOM.
|
|
111
|
-
* Called by the base class when a threat is detected and threat-feedback is set.
|
|
112
|
-
* Uses a separate container from validation errors so #clearErrors() does not
|
|
113
|
-
* clobber an active threat message.
|
|
114
|
-
* @protected
|
|
115
|
-
*/
|
|
116
|
-
protected showThreatFeedback(patternId: string, tier: SecurityTierValue): void;
|
|
117
|
-
/**
|
|
118
|
-
* Clear the threat feedback container.
|
|
119
|
-
* @protected
|
|
120
|
-
*/
|
|
13
|
+
protected showThreatFeedback(patternId: string): void;
|
|
121
14
|
protected clearThreatFeedback(): void;
|
|
122
|
-
/**
|
|
123
|
-
* Cleanup on disconnect
|
|
124
|
-
*/
|
|
125
15
|
disconnectedCallback(): void;
|
|
126
16
|
}
|
|
127
|
-
export default SecureInput;
|
|
128
17
|
//# sourceMappingURL=secure-input.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-input.d.ts","sourceRoot":"","sources":["../../../src/components/secure-input/secure-input.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secure-input.d.ts","sourceRoot":"","sources":["../../../src/components/secure-input/secure-input.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnE,qBAAa,WAAY,SAAQ,mBAAmB;;IAoBlD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAcxC;IAED,SAAS,CAAC,MAAM,IAAI,gBAAgB,GAAG,WAAW,GAAG,IAAI;IA2gBzD,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAkBtG,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,OAAO,CAuDnB;IAED,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;cAMO,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;cAyB3C,mBAAmB,IAAI,IAAI;IAY9C,oBAAoB,IAAI,IAAI;CAS7B"}
|
|
@@ -1,30 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* @fileoverview Secure Input Component
|
|
3
|
-
*
|
|
4
|
-
* A security-first input field component that implements progressive enhancement,
|
|
5
|
-
* tier-based validation, masking, and audit logging.
|
|
6
|
-
*
|
|
7
|
-
* Progressive Enhancement Strategy:
|
|
8
|
-
* 1. Without JavaScript: Falls back to native HTML5 input with attributes
|
|
9
|
-
* 2. With JavaScript: Enhances with masking, real-time validation, rate limiting
|
|
10
|
-
*
|
|
11
|
-
* Usage:
|
|
12
|
-
* <secure-input
|
|
13
|
-
* security-tier="critical"
|
|
14
|
-
* name="password"
|
|
15
|
-
* label="Password"
|
|
16
|
-
* type="password"
|
|
17
|
-
* required
|
|
18
|
-
* ></secure-input>
|
|
19
|
-
*
|
|
20
|
-
* Security Features:
|
|
21
|
-
* - XSS prevention via sanitization
|
|
22
|
-
* - Configurable masking based on security tier
|
|
23
|
-
* - Rate limiting for sensitive/critical tiers
|
|
24
|
-
* - Autocomplete control based on tier
|
|
25
|
-
* - Comprehensive audit logging
|
|
26
|
-
* - Visual security indicators
|
|
27
|
-
*
|
|
28
|
-
* @module secure-input
|
|
29
|
-
* @license MIT
|
|
30
|
-
*/import{SecureBaseComponent as d}from"../../core/base-component.js";import{SecurityTier as m}from"../../core/security-config.js";class c extends d{#t=null;#a=null;#s=null;#i=null;#e="";#n=!1;#r=null;#h=`secure-input-${Math.random().toString(36).substring(2,11)}`;static get observedAttributes(){return[...super.observedAttributes,"name","type","label","placeholder","required","pattern","minlength","maxlength","autocomplete","value"]}constructor(){super()}render(){const t=document.createDocumentFragment(),e=document.createElement("div");e.className="input-container",e.setAttribute("part","container");const i=this.getAttribute("label");i&&(this.#a=document.createElement("label"),this.#a.htmlFor=this.#h,this.#a.textContent=this.sanitizeValue(i),this.#a.setAttribute("part","label"),e.appendChild(this.#a));const s=document.createElement("div");return s.className="input-wrapper",s.setAttribute("part","wrapper"),this.#t=document.createElement("input"),this.#t.id=this.#h,this.#t.className="input-field",this.#t.setAttribute("part","input"),this.#g(),this.#f(),s.appendChild(this.#t),e.appendChild(s),this.#s=document.createElement("div"),this.#s.className="error-container hidden",this.#s.setAttribute("role","alert"),this.#s.setAttribute("part","error"),this.#s.id=`${this.#h}-error`,e.appendChild(this.#s),this.#i=document.createElement("div"),this.#i.className="threat-container hidden",this.#i.setAttribute("role","alert"),this.#i.setAttribute("part","threat"),this.#i.id=`${this.#h}-threat`,e.appendChild(this.#i),this.#p(),this.#b(),this.addComponentStyles(this.#L()),t.appendChild(e),t}#p(){const t=this.getAttribute("name");!t||this.closest("secure-form")||(this.#r=document.createElement("input"),this.#r.type="hidden",this.#r.name=t,this.#r.value=this.#e||"",this.appendChild(this.#r))}#o(){this.#r&&(this.#r.value=this.#e||"")}#b(){this.querySelectorAll("input, textarea, select").forEach(e=>{if(e===this.#r)return;const i=e;i.removeAttribute("required"),i.removeAttribute("name"),i.removeAttribute("minlength"),i.removeAttribute("maxlength"),i.removeAttribute("pattern"),i.setAttribute("tabindex","-1"),i.setAttribute("aria-hidden","true")})}#g(){const t=this.config,e=this.getAttribute("name");e&&(this.#t.name=this.sanitizeValue(e)),!this.getAttribute("label")&&e&&this.#t.setAttribute("aria-label",this.sanitizeValue(e)),this.#t.setAttribute("aria-describedby",`${this.#h}-error`);const i=this.getAttribute("type")||"text";this.#t.type=i;const s=this.getAttribute("placeholder");s&&(this.#t.placeholder=this.sanitizeValue(s)),(this.hasAttribute("required")||t.validation.required)&&(this.#t.required=!0,this.#t.setAttribute("aria-required","true"));const n=this.getAttribute("pattern");n&&(this.#t.pattern=n);const r=this.getAttribute("minlength");r&&(this.#t.minLength=parseInt(r,10));const l=this.getAttribute("maxlength")||t.validation.maxLength;if(l&&(this.#t.maxLength=parseInt(String(l),10)),t.storage.allowAutocomplete){const u=this.getAttribute("autocomplete")||"on";this.#t.autocomplete=u}else this.#t.autocomplete="off",this.#t.type==="password"&&(this.#t.autocomplete="new-password");this.hasAttribute("disabled")&&(this.#t.disabled=!0),this.hasAttribute("readonly")&&(this.#t.readOnly=!0);const a=this.getAttribute("value");a&&this.#u(a);const h=new Set(["email","url","tel"]);t.masking.enabled&&this.#t.type!=="password"&&!h.has(this.#t.type)&&(this.#n=!0)}#f(){this.#t.addEventListener("focus",()=>{this.recordTelemetryFocus(),this.audit("input_focused",{name:this.#t.name})}),this.#t.addEventListener("input",t=>{this.recordTelemetryInput(t),this.#A(t)}),this.#t.addEventListener("blur",()=>{this.recordTelemetryBlur(),this.#v(),this.audit("input_blurred",{name:this.#t.name,hasValue:this.#e.length>0})}),this.#t.addEventListener("change",()=>{this.audit("input_changed",{name:this.#t.name,valueLength:this.#e.length})})}#A(t){if(this.#n&&this.#t.type!=="password"){const e=t,i=e.inputType,s=e.data||"",n=this.#t.value,r=this.#t.selectionStart||0;if(i==="deleteContentBackward")r<this.#e.length&&(this.#e=this.#e.substring(0,r)+this.#e.substring(r+1));else if(i==="deleteContentForward")this.#e=this.#e.substring(0,r)+this.#e.substring(r+1);else if(i==="insertText")this.#e=this.#e.substring(0,r-s.length)+s+this.#e.substring(r-s.length);else if(i==="insertFromPaste")s&&(this.#e=this.#e.substring(0,r-s.length)+s+this.#e.substring(r-s.length));else{const a=this.#e.length,h=n.length;if(h>a){const u=h-a,o=r-u;this.#e=this.#e.substring(0,o)+n.substring(o,r)+this.#e.substring(o)}else h<a&&(this.#e=this.#e.substring(0,r)+this.#e.substring(r+(a-h)))}const l=this.#c(this.#e);this.#t.value=l,this.#t.setSelectionRange(r,r)}else this.#e=this.#t.value;this.detectInjection(this.#e,this.#t.name),this.#y(),this.#o(),this.dispatchEvent(new CustomEvent("secure-input",{detail:{name:this.#t.name,value:this.#e,masked:this.#n,tier:this.securityTier},bubbles:!0,composed:!0}))}#c(t){const e=this.config,i=e.masking.character;if(!e.masking.partial||this.securityTier===m.CRITICAL||t.length<=4)return i.repeat(t.length);const s=i.repeat(t.length-4),n=t.slice(-4);return s+n}#d(t){if(!this.#t||this.#t.type!=="password"||!t||t.length===0)return null;const e=this.securityTier;if(e==="critical"){if(t.length<8)return"Password must be at least 8 characters";if(!/[a-z]/.test(t))return"Password must include a lowercase letter";if(!/[A-Z]/.test(t))return"Password must include an uppercase letter";if(!/[0-9]/.test(t))return"Password must include a number";if(!/[^a-zA-Z0-9]/.test(t))return"Password must include a special character"}else if(e==="sensitive"){if(t.length<8)return"Password must be at least 8 characters";if(!/[a-z]/.test(t))return"Password must include a lowercase letter";if(!/[A-Z]/.test(t))return"Password must include an uppercase letter";if(!/[0-9]/.test(t))return"Password must include a number"}else if(e==="authenticated"&&t.length<6)return"Password must be at least 6 characters";return null}#m(t){if(!this.#t||this.#t.type!=="number"||!t||t.length===0)return null;const e=Number(t);if(!Number.isFinite(e))return"Value must be a valid number";if(!t.includes(".")&&!Number.isSafeInteger(e))return"Value exceeds safe integer range";const i=this.getAttribute("min"),s=this.getAttribute("max");if(i!==null){const n=Number(i);if(Number.isFinite(n)&&e<n)return`Value must be at least ${n}`}if(s!==null){const n=Number(s);if(Number.isFinite(n)&&e>n)return`Value must be at most ${n}`}return null}#v(){const t=this.checkRateLimit();if(!t.allowed){this.#l(`Too many attempts. Please wait ${Math.ceil(t.retryAfter/1e3)} seconds.`);return}const e=this.getAttribute("pattern"),i=this.getAttribute("minlength"),s=this.getAttribute("maxlength");let n=null;if(e)try{n=new RegExp(e)}catch{}const r=this.validateInput(this.#e,{required:this.hasAttribute("required")||this.config.validation.required,pattern:n,minLength:i?parseInt(i,10):0,maxLength:s?parseInt(s,10):this.config.validation.maxLength});if(!r.valid){this.#l(r.errors.join(", "));return}const l=this.#d(this.#e);if(l){this.#l(l);return}const a=this.#m(this.#e);if(a){this.#l(a);return}if(this.#t&&this.#e){let h,u;if(this.#n){const o=this.#t.value;this.#t.value=this.#e,h=this.#t.checkValidity(),u=this.#t.validationMessage,this.#t.value=o}else h=this.#t.checkValidity(),u=this.#t.validationMessage;if(!h){this.#l(u);return}}}#l(t){this.#s.textContent=t,this.#s.offsetHeight,this.#s.classList.remove("hidden"),this.#t.classList.add("error"),this.#t.setAttribute("aria-invalid","true")}#y(){this.#s.classList.add("hidden"),this.#s.addEventListener("transitionend",()=>{this.#s.classList.contains("hidden")&&(this.#s.textContent="")},{once:!0}),this.#t.classList.remove("error"),this.#t.removeAttribute("aria-invalid")}#u(t){this.#e=t,this.#n&&this.#t.type!=="password"?this.#t.value=this.#c(t):this.#t.value=t,this.#o()}#L(){return new URL("./secure-input.css",import.meta.url).href}handleAttributeChange(t,e,i){if(this.#t)switch(t){case"disabled":this.#t.disabled=this.hasAttribute("disabled");break;case"readonly":this.#t.readOnly=this.hasAttribute("readonly");break;case"value":i!==this.#e&&this.#u(i||"");break}}get value(){return this.#e}set value(t){this.#u(t||"")}get name(){return this.#t?this.#t.name:""}get valid(){const t=this.getAttribute("pattern"),e=this.getAttribute("minlength"),i=this.getAttribute("maxlength");let s=null;if(t)try{s=new RegExp(t)}catch{}if(!this.validateInput(this.#e,{required:this.hasAttribute("required")||this.config.validation.required,pattern:s,minLength:e?parseInt(e,10):0,maxLength:i?parseInt(i,10):this.config.validation.maxLength}).valid||this.#d(this.#e)!==null||this.#m(this.#e)!==null)return!1;if(this.#t&&this.#e){let r;if(this.#n){const l=this.#t.value;this.#t.value=this.#e,r=this.#t.checkValidity(),this.#t.value=l}else r=this.#t.checkValidity();if(!r)return!1}return!0}focus(){this.#t&&this.#t.focus()}blur(){this.#t&&this.#t.blur()}showThreatFeedback(t,e){if(!this.#i||!this.#t)return;this.#i.textContent="";const i=document.createElement("span");i.className="threat-message",i.textContent=this.getThreatLabel(t);const s=document.createElement("span");s.className="threat-badge",s.textContent=t;const n=document.createElement("span");n.className=`threat-tier threat-tier--${e}`,n.textContent=e,this.#i.appendChild(i),this.#i.appendChild(s),this.#i.appendChild(n),this.#i.offsetHeight,this.#i.classList.remove("hidden"),this.#t.classList.add("threat"),this.#t.setAttribute("aria-invalid","true")}clearThreatFeedback(){!this.#i||!this.#t||(this.#i.classList.add("hidden"),this.#i.addEventListener("transitionend",()=>{this.#i.classList.contains("hidden")&&(this.#i.textContent="")},{once:!0}),this.#t.classList.remove("threat"),this.#t.removeAttribute("aria-invalid"))}disconnectedCallback(){super.disconnectedCallback(),this.#e="",this.#t&&(this.#t.value="")}}customElements.define("secure-input",c);var f=c;export{c as SecureInput,f as default};
|
|
1
|
+
var o;import{SecureBaseComponent as m}from"../../core/base-component.js";import{SecurityTier as p}from"../../core/security-config.js";class d extends m{static#b=new Set(["text","url","search"]);#t=null;#a=null;#s=null;#i=null;#e="";#n=!1;#r=null;#u=null;#h=`secure-input-${Math.random().toString(36).substring(2,11)}`;static get observedAttributes(){return[...super.observedAttributes,"name","type","label","placeholder","required","pattern","minlength","maxlength","autocomplete","value"]}render(){const t=document.createDocumentFragment(),e=document.createElement("div");e.className="input-container",e.setAttribute("part","container");const i=this.getAttribute("label");i&&(this.#a=document.createElement("label"),this.#a.htmlFor=this.#h,this.#a.textContent=this.sanitizeValue(i),this.#a.setAttribute("part","label"),e.appendChild(this.#a));const s=document.createElement("div");return s.className="input-wrapper",s.setAttribute("part","wrapper"),this.#t=document.createElement("input"),this.#t.id=this.#h,this.#t.className="input-field",this.#t.setAttribute("part","input"),this.#A(),this.#v(),s.appendChild(this.#t),e.appendChild(s),this.#s=document.createElement("div"),this.#s.className="error-container hidden",this.#s.setAttribute("role","alert"),this.#s.setAttribute("part","error"),this.#s.id=`${this.#h}-error`,e.appendChild(this.#s),this.#i=document.createElement("div"),this.#i.className="threat-container hidden",this.#i.setAttribute("role","alert"),this.#i.setAttribute("part","threat"),this.#i.id=`${this.#h}-threat`,e.appendChild(this.#i),this.#f(),this.#g(),this.addComponentStyles(this.#E()),t.appendChild(e),t}#f(){const t=this.getAttribute("name");t&&(this.closest("secure-form")||(this.#r=document.createElement("input"),this.#r.type="hidden",this.#r.name=t,this.#r.value=this.#e||"",this.appendChild(this.#r)))}#d(){this.#r&&(this.#r.value=this.#e||"")}#g(){this.querySelectorAll("input, textarea, select").forEach(e=>{if(e===this.#r)return;const i=e;i.removeAttribute("required"),i.removeAttribute("name"),i.removeAttribute("minlength"),i.removeAttribute("maxlength"),i.removeAttribute("pattern"),i.setAttribute("tabindex","-1"),i.setAttribute("aria-hidden","true")})}#A(){const t=this.config,e=this.getAttribute("name");e&&(this.#t.name=this.sanitizeValue(e)),!this.getAttribute("label")&&e&&this.#t.setAttribute("aria-label",this.sanitizeValue(e)),this.#t.setAttribute("aria-describedby",`${this.#h}-error`);const i=this.getAttribute("type")||"text";this.#t.type=i;const s=this.getAttribute("placeholder");s&&(this.#t.placeholder=this.sanitizeValue(s)),(this.hasAttribute("required")||t.validation.required)&&(this.#t.required=!0,this.#t.setAttribute("aria-required","true"));const r=this.getAttribute("pattern");r&&(this.#t.pattern=r);const n=this.getAttribute("minlength");n&&(this.#t.minLength=parseInt(n,10));const h=this.getAttribute("maxlength")||t.validation.maxLength;if(h&&(this.#t.maxLength=parseInt(String(h),10)),t.storage.allowAutocomplete){const u=this.getAttribute("autocomplete")||"on";this.#t.autocomplete=u}else this.#t.autocomplete="off",this.#t.type==="password"&&(this.#t.autocomplete="new-password");this.hasAttribute("disabled")&&(this.#t.disabled=!0),this.hasAttribute("readonly")&&(this.#t.readOnly=!0);const a=this.getAttribute("value");a&&this.#o(a);const l=new Set(["email","url","tel"]);t.masking.enabled&&this.#t.type!=="password"&&!l.has(this.#t.type)&&(this.#n=!0)}#v(){this.#t.addEventListener("focus",()=>{this.recordTelemetryFocus(),this.audit("input_focused",{name:this.#t.name})}),this.#t.addEventListener("input",t=>{this.recordTelemetryInput(t),this.#y(t)}),this.#t.addEventListener("blur",()=>{this.recordTelemetryBlur(),this.#L(),this.audit("input_blurred",{name:this.#t.name,hasValue:this.#e.length>0})}),this.#t.addEventListener("paste",t=>{this.#n&&(this.#u=t.clipboardData?.getData("text/plain")??null)}),this.#t.addEventListener("change",()=>{this.audit("input_changed",{name:this.#t.name,valueLength:this.#e.length})})}#y(t){if(this.#n&&this.#t.type!=="password"){const i=t,s=i.inputType,r=i.data||"",n=this.#t.selectionStart||0;if(s==="deleteContentBackward")n<this.#e.length&&(this.#e=this.#e.substring(0,n)+this.#e.substring(n+1));else if(s==="deleteContentForward")this.#e=this.#e.substring(0,n)+this.#e.substring(n+1);else if(s==="insertText")this.#e=this.#e.substring(0,n-r.length)+r+this.#e.substring(n-r.length);else if(s==="insertFromPaste"){const a=this.#u??r;this.#u=null,a&&(this.#e=this.#e.substring(0,n-a.length)+a+this.#e.substring(n-a.length))}else this.#e="",this.#t.value="";const h=this.#c(this.#e);this.#t.value=h,this.#t.setSelectionRange(n,n)}else this.#e=this.#t.value;const e=this.#t.type;e!=="number"&&this.detectInjection(this.#e,this.#t.name,o.#b.has(e)),this.#w(),this.#d(),this.dispatchEvent(new CustomEvent("secure-input-change",{detail:{name:this.#t.name,value:this.#e,masked:this.#n,tier:this.securityTier},bubbles:!0,composed:!0}))}#c(t){const e=this.config,i=e.masking.character;if(!e.masking.partial||this.securityTier===p.CRITICAL||t.length<=4)return i.repeat(t.length);const s=i.repeat(t.length-4),r=t.slice(-4);return s+r}#m(t){if(!this.#t||this.#t.type!=="password"||!t||t.length===0)return null;const e=this.securityTier;if(e==="critical"){if(t.length<8)return"Password must be at least 8 characters";if(!/[a-z]/.test(t))return"Password must include a lowercase letter";if(!/[A-Z]/.test(t))return"Password must include an uppercase letter";if(!/[0-9]/.test(t))return"Password must include a number";if(!/[^a-zA-Z0-9]/.test(t))return"Password must include a special character"}else if(e==="sensitive"){if(t.length<8)return"Password must be at least 8 characters";if(!/[a-z]/.test(t))return"Password must include a lowercase letter";if(!/[A-Z]/.test(t))return"Password must include an uppercase letter";if(!/[0-9]/.test(t))return"Password must include a number"}else if(e==="authenticated"&&t.length<6)return"Password must be at least 6 characters";return null}#p(t){if(!this.#t||this.#t.type!=="number"||!t||t.length===0)return null;const e=Number(t);if(!Number.isFinite(e))return"Value must be a valid number";if(!t.includes(".")&&!Number.isSafeInteger(e))return"Value exceeds safe integer range";const i=this.getAttribute("min"),s=this.getAttribute("max");if(i!==null){const r=Number(i);if(Number.isFinite(r)&&e<r)return`Value must be at least ${r}`}if(s!==null){const r=Number(s);if(Number.isFinite(r)&&e>r)return`Value must be at most ${r}`}return null}#L(){const t=this.checkRateLimit();if(!t.allowed){this.#l(`Too many attempts. Please wait ${Math.ceil(t.retryAfter/1e3)} seconds.`);return}const e=this.getAttribute("pattern"),i=this.getAttribute("minlength"),s=this.getAttribute("maxlength");let r=null;if(e)try{r=new RegExp(e)}catch{}const n=this.validateInput(this.#e,{required:this.hasAttribute("required")||this.config.validation.required,pattern:r,minLength:i?parseInt(i,10):0,maxLength:s?parseInt(s,10):this.config.validation.maxLength});if(!n.valid){this.#l(n.errors.join(", "));return}const h=this.#m(this.#e);if(h){this.#l(h);return}const a=this.#p(this.#e);if(a){this.#l(a);return}if(this.#t&&this.#e){let l,u;if(this.#n){const c=this.#t.value;this.#t.value=this.#e,l=this.#t.checkValidity(),u=this.#t.validationMessage,this.#t.value=c}else l=this.#t.checkValidity(),u=this.#t.validationMessage;if(!l){this.#l(u);return}}}#l(t){this.#s.textContent=t,this.#s.offsetHeight,this.#s.classList.remove("hidden"),this.#t.classList.add("error"),this.#t.setAttribute("aria-invalid","true")}#w(){this.#s.classList.add("hidden"),this.#s.addEventListener("transitionend",()=>{this.#s.classList.contains("hidden")&&(this.#s.textContent="")},{once:!0}),this.#t.classList.remove("error"),this.#t.removeAttribute("aria-invalid")}#o(t){this.#e=t,this.#n&&this.#t.type!=="password"?this.#t.value=this.#c(t):this.#t.value=t,this.#d()}#E(){return new URL("./secure-input.css",import.meta.url).href}handleAttributeChange(t,e,i){if(this.#t)switch(t){case"disabled":this.#t.disabled=this.hasAttribute("disabled");break;case"readonly":this.#t.readOnly=this.hasAttribute("readonly");break;case"value":i!==this.#e&&this.#o(i||"");break}}get value(){return this.#e}set value(t){this.#o(t||"")}get name(){return this.#t?this.#t.name:""}get valid(){const t=this.getAttribute("pattern"),e=this.getAttribute("minlength"),i=this.getAttribute("maxlength");let s=null;if(t)try{s=new RegExp(t)}catch{}if(!this.validateInput(this.#e,{required:this.hasAttribute("required")||this.config.validation.required,pattern:s,minLength:e?parseInt(e,10):0,maxLength:i?parseInt(i,10):this.config.validation.maxLength}).valid||this.#m(this.#e)!==null||this.#p(this.#e)!==null)return!1;if(this.#t&&this.#e){let n;if(this.#n){const h=this.#t.value;this.#t.value=this.#e,n=this.#t.checkValidity(),this.#t.value=h}else n=this.#t.checkValidity();if(!n)return!1}return!0}focus(){this.#t&&this.#t.focus()}blur(){this.#t&&this.#t.blur()}showThreatFeedback(t){if(!this.#i||!this.#t)return;this.#i.textContent="";const e=document.createElement("span");e.className="threat-message",e.textContent=this.getThreatLabel(t);const i=document.createElement("span");i.className="threat-badge",i.textContent=t,this.#i.appendChild(e),this.#i.appendChild(i),this.#i.offsetHeight,this.#i.classList.remove("hidden"),this.#t.classList.add("threat"),this.#t.setAttribute("aria-invalid","true")}clearThreatFeedback(){!this.#i||!this.#t||(this.#i.classList.add("hidden"),this.#i.addEventListener("transitionend",()=>{this.#i.classList.contains("hidden")&&(this.#i.textContent="")},{once:!0}),this.#t.classList.remove("threat"),this.#t.removeAttribute("aria-invalid"))}disconnectedCallback(){super.disconnectedCallback(),this.#e="",this.#u=null,this.#t&&(this.#t.value="")}}o=d,customElements.define("secure-input",d);export{d as SecureInput};
|