@xcodleox/devinspector 9.0.1 → 9.0.2

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/dist/angular.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var te=Object.create;var v=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var O=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),I=t=>{throw TypeError(t)};var se=(t,e,r)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Q=(t,e)=>v(t,"name",{value:e,configurable:!0});var ie=(t,e)=>{for(var r in e)v(t,r,{get:e[r],enumerable:!0})},oe=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of re(e))!ne.call(t,n)&&n!==r&&v(t,n,{get:()=>e[n],enumerable:!(s=N(e,n))||s.enumerable});return t};var ae=t=>oe(v({},"__esModule",{value:!0}),t);var B=t=>[,,,te(t?.[O("metadata")]??null)],L=["class","method","getter","setter","accessor","field","value","get","set"],E=t=>t!==void 0&&typeof t!="function"?I("Function expected"):t,ue=(t,e,r,s,n)=>({kind:L[t],name:e,metadata:s,addInitializer:i=>r._?I("Already initialized"):n.push(E(i||null))}),de=(t,e)=>se(e,O("metadata"),t[3]),H=(t,e,r,s)=>{for(var n=0,i=t[e>>1],a=i&&i.length;n<a;n++)e&1?i[n].call(r):s=i[n].call(r,s);return s},G=(t,e,r,s,n,i)=>{var a,u,p,d,h,o=e&7,y=!!(e&8),g=!!(e&16),U=o>3?t.length+1:o?y?1:2:0,q=L[o+5],P=o>3&&(t[U-1]=[]),ee=t[U]||(t[U]=[]),f=o&&(!g&&!y&&(n=n.prototype),o<5&&(o>3||!g)&&N(o<4?n:{get[r](){return x(this,i)},set[r](m){return C(this,i,m)}},r));o?g&&o<4&&Q(i,(o>2?"set ":o>1?"get ":"")+r):Q(n,r);for(var S=s.length-1;S>=0;S--)d=ue(o,r,p={},t[3],ee),o&&(d.static=y,d.private=g,h=d.access={has:g?m=>ce(n,m):m=>r in m},o^3&&(h.get=g?m=>(o^1?x:pe)(m,n,o^4?i:f.get):m=>m[r]),o>2&&(h.set=g?(m,A)=>C(m,n,A,o^4?i:f.set):(m,A)=>m[r]=A)),u=(0,s[S])(o?o<4?g?i:f[q]:o>4?void 0:{get:f.get,set:f.set}:n,d),p._=1,o^4||u===void 0?E(u)&&(o>4?P.unshift(u):o?g?i=u:f[q]=u:n=u):typeof u!="object"||u===null?I("Object expected"):(E(a=u.get)&&(f.get=a),E(a=u.set)&&(f.set=a),E(a=u.init)&&P.unshift(a));return o||de(t,n),f&&v(n,r,f),g?o^4?i:f:n};var _=(t,e,r)=>e.has(t)||I("Cannot "+r),ce=(t,e)=>Object(e)!==e?I('Cannot use the "in" operator on this value'):t.has(e),x=(t,e,r)=>(_(t,e,"read from private field"),r?r.call(t):e.get(t));var C=(t,e,r,s)=>(_(t,e,"write to private field"),s?s.call(t,r):e.set(t,r),r),pe=(t,e,r)=>(_(t,e,"access private method"),r);var we={};ie(we,{AuditAngularErrorHandler:()=>w,audit:()=>c,auditInterceptor:()=>ge,devInspectorInterceptor:()=>Z,provideDevInspector:()=>be});module.exports=ae(we);var M=require("@angular/core"),R=require("@angular/common/http"),Y=require("rxjs/operators");var z="https://api.devinspector.com.br/api/ingest/track",$="https://api.devinspector.com.br/api/ingest/apm";var me=["password","senha","token","authorization","auth","bearer","credit_card","creditcard","cartao","cvv","cpf","rg","secret","private_key","privatekey"];function le(t){let e=t.toLowerCase().replace(/[\s-]/g,"_");return me.some(r=>e.includes(r))}function b(t,e=0,r=new WeakSet){if(t==null)return t;if(typeof t=="string")return t.length>1e4?`${t.slice(0,1e4)}...[truncated]`:t;if(typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="bigint")return String(t);if(typeof t=="function")return"[Function]";if(e>=6)return"[MaxDepth]";if(typeof t!="object")return String(t);if(r.has(t))return"[Circular]";r.add(t);try{if(Array.isArray(t))return t.slice(0,100).map(i=>b(i,e+1,r));let s=t,n={};for(let[i,a]of Object.entries(s)){if(le(i)){n[i]="[REDACTED]";continue}n[i]=b(a,e+1,r)}return n}finally{r.delete(t)}}function F(t){if(t instanceof Error)return t.message||"Erro desconhecido";if(typeof t=="string")return t||"Erro desconhecido";try{let e=b(t);return typeof e=="string"?e||"Erro desconhecido":JSON.stringify(e)||"Erro desconhecido"}catch{return"Erro desconhecido"}}function K(t){return t&&String(t).trim().toUpperCase()||void 0}function j(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.round(t)}function X(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.max(0,Math.round(t))}function fe(t){return String(t??"").trim().slice(0,200)}function he(t){let e=Number(t);if(!Number.isFinite(e))throw new Error("metricValue deve ser um n\xFAmero finito.");return e}function T(t){let e=typeof globalThis<"u"?globalThis.crypto:void 0;return e&&typeof e.randomUUID=="function"?`${t}-${e.randomUUID()}`:`${t}-${Date.now()}-${Math.random().toString(36).slice(2,12)}`}function l(t){return b(t)}var k=class{constructor(){this.apiKey="";this.endpoint=z;this.apmEndpoint=$;this.environment="production";this.slowThresholdMs=300;this.requestTimeoutMs=1e4;this.breadcrumbs=[];this.initialized=!1;this.listenersAttached=!1;this.sendQueue=[];this.isProcessingQueue=!1;this.flushResolvers=[]}init(e){if(!e?.apiKey?.trim())throw new Error("DevInspector: apiKey \xE9 obrigat\xF3rio.");this.apiKey=e.apiKey.trim(),this.endpoint=e.endpoint?.trim()||z,this.apmEndpoint=e.apmEndpoint?.trim()||$,this.environment=e.environment?.trim()||"production",this.release=e.release?.trim()||void 0,this.slowThresholdMs=typeof e.slowThresholdMs=="number"&&Number.isFinite(e.slowThresholdMs)&&e.slowThresholdMs>=0?Math.round(e.slowThresholdMs):300,this.requestTimeoutMs=typeof e.requestTimeoutMs=="number"&&Number.isFinite(e.requestTimeoutMs)&&e.requestTimeoutMs>0?Math.round(e.requestTimeoutMs):1e4,this.initialized=!0,this.attachGlobalListeners(),this.processQueue()}getApiKey(){return this.apiKey}getEndpoint(){return this.endpoint}getApmEndpoint(){return this.apmEndpoint}getEnvironment(){return this.environment}getRelease(){return this.release}getSlowThresholdMs(){return this.slowThresholdMs}getRequestTimeoutMs(){return this.requestTimeoutMs}isInitialized(){return this.initialized}setUser(e){this.user=e?b(e):void 0}getUser(){return this.user}clearUser(){this.user=void 0}addBreadcrumb(e){if(!e||!e.type?.trim())return;let r={timestamp:e.timestamp||new Date().toISOString(),type:e.type.trim().slice(0,200),message:e.message?.slice(0,1e4),metadata:e.metadata?b(e.metadata):void 0};this.breadcrumbs.push(r),this.breadcrumbs.length>50&&(this.breadcrumbs=this.breadcrumbs.slice(-50))}getBreadcrumbs(){return this.breadcrumbs.map(e=>l(e))}clearBreadcrumbs(){this.breadcrumbs=[]}getContext(){return{environment:this.environment,release:this.release,user:l(this.user),breadcrumbs:this.getBreadcrumbs()}}isIngestUrl(e){if(!e)return!1;try{let r=new URL(this.endpoint),s=new URL(this.apmEndpoint),n=new URL(e,r.origin),i=n.origin,a=n.pathname.replace(/\/$/,""),u=r.pathname.replace(/\/$/,""),p=s.pathname.replace(/\/$/,"");return i===r.origin&&a===u||i===s.origin&&a===p}catch{return e.includes(this.endpoint)||e.includes(this.apmEndpoint)}}createRequestId(){return T("req")}createTraceId(){return T("trace")}createSpanId(){return T("span")}captureRequest(e){let r=K(e.method)||"GET",s=String(e.url||"").trim();if(!s)return Promise.resolve();let n=j(e.statusCode)??0,i=X(e.durationMs)??0,a={...e.metadata||{},...e.route!==void 0?{route:e.route}:{},...e.dbQueriesCount!==void 0?{dbQueriesCount:e.dbQueriesCount}:{},...e.slowQueryMs!==void 0?{slowQueryMs:e.slowQueryMs}:{},timestamp:new Date().toISOString()};return this.sendApm({type:"request_metric",method:r,url:s,statusCode:n,durationMs:i,browser:e.userAgent,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:l(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:l(a)})}captureDbQuery(e){let r=String(e.operation||"").trim();if(!r)return Promise.resolve();let s=X(e.durationMs)??0,n={...e.metadata||{},operation:r,collection:e.collection||"Unknown",durationMs:s,timestamp:new Date().toISOString()};return this.sendApm({type:"db_query",message:`Database operation: ${r}`,url:e.url,method:"DB",durationMs:s,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:l(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:l(n)})}captureMetric(e,r,s={},n={}){let i=fe(e);if(!i)return Promise.resolve();let a;try{a=he(r)}catch{return Promise.resolve()}return this.sendApm({type:"custom_metric",metricName:i,metricValue:a,requestId:n.requestId,traceId:n.traceId,spanId:n.spanId,environment:this.environment,release:this.release,user:l(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:l({...s,timestamp:new Date().toISOString()})})}captureCustomMetric(e){return this.captureMetric(e.metricName,e.metricValue,e.metadata||{},{requestId:e.requestId,traceId:e.traceId,spanId:e.spanId})}captureError(e,r={}){let s=e?.message?.trim()||"Erro desconhecido",n={...r},i=K(n.method),a=j(n.statusCode??n.status),u=n.url!==void 0&&n.url!==null?String(n.url).trim():void 0;return delete n.method,delete n.statusCode,delete n.status,delete n.requestId,delete n.traceId,delete n.spanId,delete n.durationMs,this.sendError({type:"error",message:s,stackTrace:e?.stack||"",...u?{url:u}:{},...i?{method:i}:{},...a!==void 0?{statusCode:a}:{},environment:this.environment,release:this.release,user:l(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:l({...n,timestamp:new Date().toISOString()})})}captureException(e,r={}){let s=e instanceof Error?e:new Error(F(e));return this.captureError(s,r)}captureMessage(e,r={}){let s=String(e||"").trim();return s?this.sendApm({type:"message",message:s.slice(0,1e4),environment:this.environment,release:this.release,user:l(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:l({...r,timestamp:new Date().toISOString()})}):Promise.resolve()}async flush(){if(!(this.sendQueue.length===0&&!this.isProcessingQueue))return new Promise(e=>{this.flushResolvers.push(e),this.processQueue()})}attachGlobalListeners(){if(this.listenersAttached||typeof globalThis>"u")return;this.listenersAttached=!0;let e=globalThis;if(typeof e.ErrorUtils<"u"){let r=e.ErrorUtils.getGlobalHandler?.();e.ErrorUtils.setGlobalHandler?.((s,n)=>{this.captureError(s,{platform:"react-native",fatal:n}).finally(()=>{typeof r=="function"&&r(s,n)})})}if(typeof window<"u"&&typeof window.addEventListener=="function"){window.addEventListener("error",r=>{let s=r.error instanceof Error?r.error:new Error(r.message||"Erro global");this.captureError(s,{url:r.filename||window.location.href,line:r.lineno,column:r.colno,platform:"browser"})}),window.addEventListener("unhandledrejection",r=>{let s=r.reason instanceof Error?r.reason:new Error(F(r.reason));this.captureError(s,{platform:"browser",url:window.location.href})});return}typeof process<"u"&&typeof process.on=="function"&&(process.on("uncaughtException",r=>{this.captureError(r,{platform:"node"})}),process.on("unhandledRejection",r=>{this.captureException(r,{platform:"node"})}))}sendError(e){return this.enqueue(this.endpoint,e)}sendApm(e){return this.enqueue(this.apmEndpoint,e)}enqueue(e,r){if(!this.initialized||!this.apiKey)return Promise.resolve();let s={id:T("event"),endpoint:e,payload:l(r),resolve:()=>{}};return new Promise(n=>{s.resolve=n,this.sendQueue.push(s),this.processQueue()})}async processQueue(){if(!(this.isProcessingQueue||!this.initialized||!this.apiKey)){this.isProcessingQueue=!0;try{for(;this.sendQueue.length>0;){let e=this.sendQueue.shift();if(e)try{await this.sendToEndpoint(e.endpoint,e.payload)}finally{e.resolve()}}}finally{if(this.isProcessingQueue=!1,this.sendQueue.length===0){let e=this.flushResolvers.splice(0);for(let r of e)r()}this.sendQueue.length>0&&this.processQueue()}}}async sendToEndpoint(e,r){let s=typeof fetch=="function"?fetch:void 0;if(!s)return;let n=b(r),i,a;try{typeof AbortController<"u"&&(i=new AbortController,a=setTimeout(()=>{i?.abort()},this.requestTimeoutMs));let u=typeof window<"u"&&typeof window.document<"u",p={method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(n),signal:i?.signal};if(u&&(p.keepalive=!0),!(await s(e,p)).ok)return}catch{return}finally{a!==void 0&&clearTimeout(a)}}},V="__DEVINSPECT_AUDIT_CORE_INSTANCE__",J=typeof globalThis<"u"?globalThis:{},c=J[V]||new k;J[V]=c;var W,D;W=[(0,M.Injectable)({providedIn:"root"})];var w=class{handleError(e){let r=e instanceof Error?e:new Error(String(e));c.captureError(r,{framework:"Angular",platform:typeof window<"u"?"browser":"server",url:typeof window<"u"?window.location.href:""}),console.error("[DevInspector Angular Error]:",e)}};D=B(null),w=G(D,0,"AuditAngularErrorHandler",W,w),H(D,1,w);var Z=(t,e)=>{let r=t.urlWithParams||t.url||"";if(r&&c.isIngestUrl(r))return e(t);let s=c.createRequestId(),n=c.createTraceId(),i=c.createSpanId(),a=t.clone({setHeaders:{"x-devinspector-request-id":s,"x-devinspector-trace-id":n,"x-devinspector-span-id":i}}),u=typeof performance<"u"?performance.now():Date.now();return e(a).pipe((0,Y.tap)({next:p=>{if(!(p instanceof R.HttpResponse))return;let d=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-u)),h=p.status||0;(h>=400||d>=c.getSlowThresholdMs())&&c.captureRequest({method:t.method||"GET",url:r,statusCode:h,durationMs:d,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),c.addBreadcrumb({type:"http",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:h,durationMs:d,requestId:s,traceId:n,spanId:i}})},error:p=>{let d=p instanceof R.HttpErrorResponse?p:null,h=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-u)),o=d?.status||0,y=d?.message||d?.statusText||"Erro de rede no cliente";c.captureRequest({method:t.method||"GET",url:r,statusCode:o,durationMs:h,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),c.captureException(new Error(`HTTP Error ${o}: ${y}`),{url:r,method:t.method||"GET",status:o,statusText:d?.statusText||"",type:"angular_network_error",requestId:s,traceId:n,spanId:i}),c.addBreadcrumb({type:"http_error",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:o,durationMs:h,requestId:s,traceId:n,spanId:i,error:y}})}}))},ge=Z;function be(){return[{provide:M.ErrorHandler,useClass:w}]}0&&(module.exports={AuditAngularErrorHandler,audit,auditInterceptor,devInspectorInterceptor,provideDevInspector});
1
+ "use strict";var y=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var r in e)y(t,r,{get:e[r],enumerable:!0})},C=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of P(e))!Q.call(t,n)&&n!==r&&y(t,n,{get:()=>e[n],enumerable:!(s=D(e,n))||s.enumerable});return t};var N=t=>C(y({},"__esModule",{value:!0}),t);var z={};x(z,{AuditAngularErrorHandler:()=>m,audit:()=>a,auditInterceptor:()=>G,devInspectorInterceptor:()=>q});module.exports=N(z);var k=require("@angular/core"),b=require("@angular/common/http"),_=require("rxjs/operators");var v="https://api.devinspector.com.br/api/ingest/track",I="https://api.devinspector.com.br/api/ingest/apm";var O=["password","senha","token","authorization","auth","bearer","credit_card","creditcard","cartao","cvv","cpf","rg","secret","private_key","privatekey"];function B(t){let e=t.toLowerCase().replace(/[\s-]/g,"_");return O.some(r=>e.includes(r))}function l(t,e=0,r=new WeakSet){if(t==null)return t;if(typeof t=="string")return t.length>1e4?`${t.slice(0,1e4)}...[truncated]`:t;if(typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="bigint")return String(t);if(typeof t=="function")return"[Function]";if(e>=6)return"[MaxDepth]";if(typeof t!="object")return String(t);if(r.has(t))return"[Circular]";r.add(t);try{if(Array.isArray(t))return t.slice(0,100).map(i=>l(i,e+1,r));let s=t,n={};for(let[i,o]of Object.entries(s)){if(B(i)){n[i]="[REDACTED]";continue}n[i]=l(o,e+1,r)}return n}finally{r.delete(t)}}function T(t){if(t instanceof Error)return t.message||"Erro desconhecido";if(typeof t=="string")return t||"Erro desconhecido";try{let e=l(t);return typeof e=="string"?e||"Erro desconhecido":JSON.stringify(e)||"Erro desconhecido"}catch{return"Erro desconhecido"}}function M(t){return t&&String(t).trim().toUpperCase()||void 0}function R(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.round(t)}function A(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.max(0,Math.round(t))}function H(t){return String(t??"").trim().slice(0,200)}function L(t){let e=Number(t);if(!Number.isFinite(e))throw new Error("metricValue deve ser um n\xFAmero finito.");return e}function g(t){let e=typeof globalThis<"u"?globalThis.crypto:void 0;return e&&typeof e.randomUUID=="function"?`${t}-${e.randomUUID()}`:`${t}-${Date.now()}-${Math.random().toString(36).slice(2,12)}`}function u(t){return l(t)}var w=class{constructor(){this.apiKey="";this.endpoint=v;this.apmEndpoint=I;this.environment="production";this.slowThresholdMs=300;this.requestTimeoutMs=1e4;this.breadcrumbs=[];this.initialized=!1;this.listenersAttached=!1;this.sendQueue=[];this.isProcessingQueue=!1;this.flushResolvers=[]}init(e){if(!e?.apiKey?.trim())throw new Error("DevInspector: apiKey \xE9 obrigat\xF3rio.");this.apiKey=e.apiKey.trim(),this.endpoint=e.endpoint?.trim()||v,this.apmEndpoint=e.apmEndpoint?.trim()||I,this.environment=e.environment?.trim()||"production",this.release=e.release?.trim()||void 0,this.slowThresholdMs=typeof e.slowThresholdMs=="number"&&Number.isFinite(e.slowThresholdMs)&&e.slowThresholdMs>=0?Math.round(e.slowThresholdMs):300,this.requestTimeoutMs=typeof e.requestTimeoutMs=="number"&&Number.isFinite(e.requestTimeoutMs)&&e.requestTimeoutMs>0?Math.round(e.requestTimeoutMs):1e4,this.initialized=!0,this.attachGlobalListeners(),this.processQueue()}getApiKey(){return this.apiKey}getEndpoint(){return this.endpoint}getApmEndpoint(){return this.apmEndpoint}getEnvironment(){return this.environment}getRelease(){return this.release}getSlowThresholdMs(){return this.slowThresholdMs}getRequestTimeoutMs(){return this.requestTimeoutMs}isInitialized(){return this.initialized}setUser(e){this.user=e?l(e):void 0}getUser(){return this.user}clearUser(){this.user=void 0}addBreadcrumb(e){if(!e||!e.type?.trim())return;let r={timestamp:e.timestamp||new Date().toISOString(),type:e.type.trim().slice(0,200),message:e.message?.slice(0,1e4),metadata:e.metadata?l(e.metadata):void 0};this.breadcrumbs.push(r),this.breadcrumbs.length>50&&(this.breadcrumbs=this.breadcrumbs.slice(-50))}getBreadcrumbs(){return this.breadcrumbs.map(e=>u(e))}clearBreadcrumbs(){this.breadcrumbs=[]}getContext(){return{environment:this.environment,release:this.release,user:u(this.user),breadcrumbs:this.getBreadcrumbs()}}isIngestUrl(e){if(!e)return!1;try{let r=new URL(this.endpoint),s=new URL(this.apmEndpoint),n=new URL(e,r.origin),i=n.origin,o=n.pathname.replace(/\/$/,""),c=r.pathname.replace(/\/$/,""),d=s.pathname.replace(/\/$/,"");return i===r.origin&&o===c||i===s.origin&&o===d}catch{return e.includes(this.endpoint)||e.includes(this.apmEndpoint)}}createRequestId(){return g("req")}createTraceId(){return g("trace")}createSpanId(){return g("span")}captureRequest(e){let r=M(e.method)||"GET",s=String(e.url||"").trim();if(!s)return Promise.resolve();let n=R(e.statusCode)??0,i=A(e.durationMs)??0,o={...e.metadata||{},...e.route!==void 0?{route:e.route}:{},...e.dbQueriesCount!==void 0?{dbQueriesCount:e.dbQueriesCount}:{},...e.slowQueryMs!==void 0?{slowQueryMs:e.slowQueryMs}:{},timestamp:new Date().toISOString()};return this.sendApm({type:"request_metric",method:r,url:s,statusCode:n,durationMs:i,browser:e.userAgent,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:u(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:u(o)})}captureDbQuery(e){let r=String(e.operation||"").trim();if(!r)return Promise.resolve();let s=A(e.durationMs)??0,n={...e.metadata||{},operation:r,collection:e.collection||"Unknown",durationMs:s,timestamp:new Date().toISOString()};return this.sendApm({type:"db_query",message:`Database operation: ${r}`,url:e.url,method:"DB",durationMs:s,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:u(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:u(n)})}captureMetric(e,r,s={},n={}){let i=H(e);if(!i)return Promise.resolve();let o;try{o=L(r)}catch{return Promise.resolve()}return this.sendApm({type:"custom_metric",metricName:i,metricValue:o,requestId:n.requestId,traceId:n.traceId,spanId:n.spanId,environment:this.environment,release:this.release,user:u(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:u({...s,timestamp:new Date().toISOString()})})}captureCustomMetric(e){return this.captureMetric(e.metricName,e.metricValue,e.metadata||{},{requestId:e.requestId,traceId:e.traceId,spanId:e.spanId})}captureError(e,r={}){let s=e?.message?.trim()||"Erro desconhecido",n={...r},i=M(n.method),o=R(n.statusCode??n.status),c=n.url!==void 0&&n.url!==null?String(n.url).trim():void 0;return delete n.method,delete n.statusCode,delete n.status,delete n.requestId,delete n.traceId,delete n.spanId,delete n.durationMs,this.sendError({type:"error",message:s,stackTrace:e?.stack||"",...c?{url:c}:{},...i?{method:i}:{},...o!==void 0?{statusCode:o}:{},environment:this.environment,release:this.release,user:u(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:u({...n,timestamp:new Date().toISOString()})})}captureException(e,r={}){let s=e instanceof Error?e:new Error(T(e));return this.captureError(s,r)}captureMessage(e,r={}){let s=String(e||"").trim();return s?this.sendApm({type:"message",message:s.slice(0,1e4),environment:this.environment,release:this.release,user:u(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:u({...r,timestamp:new Date().toISOString()})}):Promise.resolve()}async flush(){if(!(this.sendQueue.length===0&&!this.isProcessingQueue))return new Promise(e=>{this.flushResolvers.push(e),this.processQueue()})}attachGlobalListeners(){if(this.listenersAttached||typeof globalThis>"u")return;this.listenersAttached=!0;let e=globalThis;if(typeof e.ErrorUtils<"u"){let r=e.ErrorUtils.getGlobalHandler?.();e.ErrorUtils.setGlobalHandler?.((s,n)=>{this.captureError(s,{platform:"react-native",fatal:n}).finally(()=>{typeof r=="function"&&r(s,n)})})}if(typeof window<"u"&&typeof window.addEventListener=="function"){window.addEventListener("error",r=>{let s=r.error instanceof Error?r.error:new Error(r.message||"Erro global");this.captureError(s,{url:r.filename||window.location.href,line:r.lineno,column:r.colno,platform:"browser"})}),window.addEventListener("unhandledrejection",r=>{let s=r.reason instanceof Error?r.reason:new Error(T(r.reason));this.captureError(s,{platform:"browser",url:window.location.href})});return}typeof process<"u"&&typeof process.on=="function"&&(process.on("uncaughtException",r=>{this.captureError(r,{platform:"node"})}),process.on("unhandledRejection",r=>{this.captureException(r,{platform:"node"})}))}sendError(e){return this.enqueue(this.endpoint,e)}sendApm(e){return this.enqueue(this.apmEndpoint,e)}enqueue(e,r){if(!this.initialized||!this.apiKey)return Promise.resolve();let s={id:g("event"),endpoint:e,payload:u(r),resolve:()=>{}};return new Promise(n=>{s.resolve=n,this.sendQueue.push(s),this.processQueue()})}async processQueue(){if(!(this.isProcessingQueue||!this.initialized||!this.apiKey)){this.isProcessingQueue=!0;try{for(;this.sendQueue.length>0;){let e=this.sendQueue.shift();if(e)try{await this.sendToEndpoint(e.endpoint,e.payload)}finally{e.resolve()}}}finally{if(this.isProcessingQueue=!1,this.sendQueue.length===0){let e=this.flushResolvers.splice(0);for(let r of e)r()}this.sendQueue.length>0&&this.processQueue()}}}async sendToEndpoint(e,r){let s=typeof fetch=="function"?fetch:void 0;if(!s)return;let n=l(r),i,o;try{typeof AbortController<"u"&&(i=new AbortController,o=setTimeout(()=>{i?.abort()},this.requestTimeoutMs));let c=typeof window<"u"&&typeof window.document<"u",d={method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(n),signal:i?.signal};if(c&&(d.keepalive=!0),!(await s(e,d)).ok)return}catch{return}finally{o!==void 0&&clearTimeout(o)}}},U="__DEVINSPECT_AUDIT_CORE_INSTANCE__",S=typeof globalThis<"u"?globalThis:{},a=S[U]||new w;S[U]=a;var m=class{handleError(e){let r=e instanceof Error?e:new Error(String(e));a.captureError(r,{framework:"Angular",platform:typeof window<"u"?"browser":"server",url:typeof window<"u"?window.location.href:""}),console.error("[DevInspector Angular Error]:",e)}};m.\u0275fac=t=>new(t||m);m.\u0275prov=(0,k.\u0275\u0275defineInjectable)({token:m,factory:m.\u0275fac,providedIn:"root"});var q=(t,e)=>{let r=t.urlWithParams||t.url||"";if(r&&a.isIngestUrl(r))return e(t);let s=a.createRequestId(),n=a.createTraceId(),i=a.createSpanId(),o=t.clone({setHeaders:{"x-devinspector-request-id":s,"x-devinspector-trace-id":n,"x-devinspector-span-id":i}}),c=typeof performance<"u"?performance.now():Date.now();return e(o).pipe((0,_.tap)({next:d=>{if(!(d instanceof b.HttpResponse))return;let p=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-c)),f=d.status||0;(f>=400||p>=a.getSlowThresholdMs())&&a.captureRequest({method:t.method||"GET",url:r,statusCode:f,durationMs:p,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),a.addBreadcrumb({type:"http",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:f,durationMs:p,requestId:s,traceId:n,spanId:i}})},error:d=>{let p=d instanceof b.HttpErrorResponse?d:null,f=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-c)),h=p?.status||0,E=p?.message||p?.statusText||"Erro de rede no cliente";a.captureRequest({method:t.method||"GET",url:r,statusCode:h,durationMs:f,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),a.captureException(new Error(`HTTP Error ${h}: ${E}`),{url:r,method:t.method||"GET",status:h,statusText:p?.statusText||"",type:"angular_network_error",requestId:s,traceId:n,spanId:i}),a.addBreadcrumb({type:"http_error",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:h,durationMs:f,requestId:s,traceId:n,spanId:i,error:E}})}}))},G=q;0&&(module.exports={AuditAngularErrorHandler,audit,auditInterceptor,devInspectorInterceptor});
@@ -1,4 +1,4 @@
1
- import { ErrorHandler, Provider } from '@angular/core';
1
+ import { ErrorHandler } from '@angular/core';
2
2
  import { HttpInterceptorFn } from '@angular/common/http';
3
3
  export { audit } from './index.cjs';
4
4
 
@@ -7,6 +7,5 @@ declare class AuditAngularErrorHandler implements ErrorHandler {
7
7
  }
8
8
  declare const devInspectorInterceptor: HttpInterceptorFn;
9
9
  declare const auditInterceptor: HttpInterceptorFn;
10
- declare function provideDevInspector(): Provider[];
11
10
 
12
- export { AuditAngularErrorHandler, auditInterceptor, devInspectorInterceptor, provideDevInspector };
11
+ export { AuditAngularErrorHandler, auditInterceptor, devInspectorInterceptor };
package/dist/angular.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ErrorHandler, Provider } from '@angular/core';
1
+ import { ErrorHandler } from '@angular/core';
2
2
  import { HttpInterceptorFn } from '@angular/common/http';
3
3
  export { audit } from './index.js';
4
4
 
@@ -7,6 +7,5 @@ declare class AuditAngularErrorHandler implements ErrorHandler {
7
7
  }
8
8
  declare const devInspectorInterceptor: HttpInterceptorFn;
9
9
  declare const auditInterceptor: HttpInterceptorFn;
10
- declare function provideDevInspector(): Provider[];
11
10
 
12
- export { AuditAngularErrorHandler, auditInterceptor, devInspectorInterceptor, provideDevInspector };
11
+ export { AuditAngularErrorHandler, auditInterceptor, devInspectorInterceptor };
package/dist/angular.js CHANGED
@@ -1 +1 @@
1
- var J=Object.create;var U=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var x=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),E=t=>{throw TypeError(t)};var Y=(t,e,r)=>e in t?U(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var q=(t,e)=>U(t,"name",{value:e,configurable:!0});var C=t=>[,,,J(t?.[x("metadata")]??null)],N=["class","method","getter","setter","accessor","field","value","get","set"],v=t=>t!==void 0&&typeof t!="function"?E("Function expected"):t,Z=(t,e,r,s,n)=>({kind:N[t],name:e,metadata:s,addInitializer:i=>r._?E("Already initialized"):n.push(v(i||null))}),ee=(t,e)=>Y(e,x("metadata"),t[3]),O=(t,e,r,s)=>{for(var n=0,i=t[e>>1],a=i&&i.length;n<a;n++)e&1?i[n].call(r):s=i[n].call(r,s);return s},B=(t,e,r,s,n,i)=>{var a,u,c,d,h,o=e&7,w=!!(e&8),g=!!(e&16),T=o>3?t.length+1:o?w?1:2:0,k=N[o+5],D=o>3&&(t[T-1]=[]),V=t[T]||(t[T]=[]),f=o&&(!g&&!w&&(n=n.prototype),o<5&&(o>3||!g)&&W(o<4?n:{get[r](){return P(this,i)},set[r](p){return Q(this,i,p)}},r));o?g&&o<4&&q(i,(o>2?"set ":o>1?"get ":"")+r):q(n,r);for(var M=s.length-1;M>=0;M--)d=Z(o,r,c={},t[3],V),o&&(d.static=w,d.private=g,h=d.access={has:g?p=>te(n,p):p=>r in p},o^3&&(h.get=g?p=>(o^1?P:re)(p,n,o^4?i:f.get):p=>p[r]),o>2&&(h.set=g?(p,R)=>Q(p,n,R,o^4?i:f.set):(p,R)=>p[r]=R)),u=(0,s[M])(o?o<4?g?i:f[k]:o>4?void 0:{get:f.get,set:f.set}:n,d),c._=1,o^4||u===void 0?v(u)&&(o>4?D.unshift(u):o?g?i=u:f[k]=u:n=u):typeof u!="object"||u===null?E("Object expected"):(v(a=u.get)&&(f.get=a),v(a=u.set)&&(f.set=a),v(a=u.init)&&D.unshift(a));return o||ee(t,n),f&&U(n,r,f),g?o^4?i:f:n};var S=(t,e,r)=>e.has(t)||E("Cannot "+r),te=(t,e)=>Object(e)!==e?E('Cannot use the "in" operator on this value'):t.has(e),P=(t,e,r)=>(S(t,e,"read from private field"),r?r.call(t):e.get(t));var Q=(t,e,r,s)=>(S(t,e,"write to private field"),s?s.call(t,r):e.set(t,r),r),re=(t,e,r)=>(S(t,e,"access private method"),r);import{ErrorHandler as ae,Injectable as ue}from"@angular/core";import{HttpResponse as de,HttpErrorResponse as ce}from"@angular/common/http";import{tap as pe}from"rxjs/operators";var L="https://api.devinspector.com.br/api/ingest/track",H="https://api.devinspector.com.br/api/ingest/apm";var ne=["password","senha","token","authorization","auth","bearer","credit_card","creditcard","cartao","cvv","cpf","rg","secret","private_key","privatekey"];function se(t){let e=t.toLowerCase().replace(/[\s-]/g,"_");return ne.some(r=>e.includes(r))}function b(t,e=0,r=new WeakSet){if(t==null)return t;if(typeof t=="string")return t.length>1e4?`${t.slice(0,1e4)}...[truncated]`:t;if(typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="bigint")return String(t);if(typeof t=="function")return"[Function]";if(e>=6)return"[MaxDepth]";if(typeof t!="object")return String(t);if(r.has(t))return"[Circular]";r.add(t);try{if(Array.isArray(t))return t.slice(0,100).map(i=>b(i,e+1,r));let s=t,n={};for(let[i,a]of Object.entries(s)){if(se(i)){n[i]="[REDACTED]";continue}n[i]=b(a,e+1,r)}return n}finally{r.delete(t)}}function G(t){if(t instanceof Error)return t.message||"Erro desconhecido";if(typeof t=="string")return t||"Erro desconhecido";try{let e=b(t);return typeof e=="string"?e||"Erro desconhecido":JSON.stringify(e)||"Erro desconhecido"}catch{return"Erro desconhecido"}}function z(t){return t&&String(t).trim().toUpperCase()||void 0}function $(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.round(t)}function F(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.max(0,Math.round(t))}function ie(t){return String(t??"").trim().slice(0,200)}function oe(t){let e=Number(t);if(!Number.isFinite(e))throw new Error("metricValue deve ser um n\xFAmero finito.");return e}function I(t){let e=typeof globalThis<"u"?globalThis.crypto:void 0;return e&&typeof e.randomUUID=="function"?`${t}-${e.randomUUID()}`:`${t}-${Date.now()}-${Math.random().toString(36).slice(2,12)}`}function m(t){return b(t)}var A=class{constructor(){this.apiKey="";this.endpoint=L;this.apmEndpoint=H;this.environment="production";this.slowThresholdMs=300;this.requestTimeoutMs=1e4;this.breadcrumbs=[];this.initialized=!1;this.listenersAttached=!1;this.sendQueue=[];this.isProcessingQueue=!1;this.flushResolvers=[]}init(e){if(!e?.apiKey?.trim())throw new Error("DevInspector: apiKey \xE9 obrigat\xF3rio.");this.apiKey=e.apiKey.trim(),this.endpoint=e.endpoint?.trim()||L,this.apmEndpoint=e.apmEndpoint?.trim()||H,this.environment=e.environment?.trim()||"production",this.release=e.release?.trim()||void 0,this.slowThresholdMs=typeof e.slowThresholdMs=="number"&&Number.isFinite(e.slowThresholdMs)&&e.slowThresholdMs>=0?Math.round(e.slowThresholdMs):300,this.requestTimeoutMs=typeof e.requestTimeoutMs=="number"&&Number.isFinite(e.requestTimeoutMs)&&e.requestTimeoutMs>0?Math.round(e.requestTimeoutMs):1e4,this.initialized=!0,this.attachGlobalListeners(),this.processQueue()}getApiKey(){return this.apiKey}getEndpoint(){return this.endpoint}getApmEndpoint(){return this.apmEndpoint}getEnvironment(){return this.environment}getRelease(){return this.release}getSlowThresholdMs(){return this.slowThresholdMs}getRequestTimeoutMs(){return this.requestTimeoutMs}isInitialized(){return this.initialized}setUser(e){this.user=e?b(e):void 0}getUser(){return this.user}clearUser(){this.user=void 0}addBreadcrumb(e){if(!e||!e.type?.trim())return;let r={timestamp:e.timestamp||new Date().toISOString(),type:e.type.trim().slice(0,200),message:e.message?.slice(0,1e4),metadata:e.metadata?b(e.metadata):void 0};this.breadcrumbs.push(r),this.breadcrumbs.length>50&&(this.breadcrumbs=this.breadcrumbs.slice(-50))}getBreadcrumbs(){return this.breadcrumbs.map(e=>m(e))}clearBreadcrumbs(){this.breadcrumbs=[]}getContext(){return{environment:this.environment,release:this.release,user:m(this.user),breadcrumbs:this.getBreadcrumbs()}}isIngestUrl(e){if(!e)return!1;try{let r=new URL(this.endpoint),s=new URL(this.apmEndpoint),n=new URL(e,r.origin),i=n.origin,a=n.pathname.replace(/\/$/,""),u=r.pathname.replace(/\/$/,""),c=s.pathname.replace(/\/$/,"");return i===r.origin&&a===u||i===s.origin&&a===c}catch{return e.includes(this.endpoint)||e.includes(this.apmEndpoint)}}createRequestId(){return I("req")}createTraceId(){return I("trace")}createSpanId(){return I("span")}captureRequest(e){let r=z(e.method)||"GET",s=String(e.url||"").trim();if(!s)return Promise.resolve();let n=$(e.statusCode)??0,i=F(e.durationMs)??0,a={...e.metadata||{},...e.route!==void 0?{route:e.route}:{},...e.dbQueriesCount!==void 0?{dbQueriesCount:e.dbQueriesCount}:{},...e.slowQueryMs!==void 0?{slowQueryMs:e.slowQueryMs}:{},timestamp:new Date().toISOString()};return this.sendApm({type:"request_metric",method:r,url:s,statusCode:n,durationMs:i,browser:e.userAgent,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:m(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:m(a)})}captureDbQuery(e){let r=String(e.operation||"").trim();if(!r)return Promise.resolve();let s=F(e.durationMs)??0,n={...e.metadata||{},operation:r,collection:e.collection||"Unknown",durationMs:s,timestamp:new Date().toISOString()};return this.sendApm({type:"db_query",message:`Database operation: ${r}`,url:e.url,method:"DB",durationMs:s,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:m(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:m(n)})}captureMetric(e,r,s={},n={}){let i=ie(e);if(!i)return Promise.resolve();let a;try{a=oe(r)}catch{return Promise.resolve()}return this.sendApm({type:"custom_metric",metricName:i,metricValue:a,requestId:n.requestId,traceId:n.traceId,spanId:n.spanId,environment:this.environment,release:this.release,user:m(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:m({...s,timestamp:new Date().toISOString()})})}captureCustomMetric(e){return this.captureMetric(e.metricName,e.metricValue,e.metadata||{},{requestId:e.requestId,traceId:e.traceId,spanId:e.spanId})}captureError(e,r={}){let s=e?.message?.trim()||"Erro desconhecido",n={...r},i=z(n.method),a=$(n.statusCode??n.status),u=n.url!==void 0&&n.url!==null?String(n.url).trim():void 0;return delete n.method,delete n.statusCode,delete n.status,delete n.requestId,delete n.traceId,delete n.spanId,delete n.durationMs,this.sendError({type:"error",message:s,stackTrace:e?.stack||"",...u?{url:u}:{},...i?{method:i}:{},...a!==void 0?{statusCode:a}:{},environment:this.environment,release:this.release,user:m(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:m({...n,timestamp:new Date().toISOString()})})}captureException(e,r={}){let s=e instanceof Error?e:new Error(G(e));return this.captureError(s,r)}captureMessage(e,r={}){let s=String(e||"").trim();return s?this.sendApm({type:"message",message:s.slice(0,1e4),environment:this.environment,release:this.release,user:m(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:m({...r,timestamp:new Date().toISOString()})}):Promise.resolve()}async flush(){if(!(this.sendQueue.length===0&&!this.isProcessingQueue))return new Promise(e=>{this.flushResolvers.push(e),this.processQueue()})}attachGlobalListeners(){if(this.listenersAttached||typeof globalThis>"u")return;this.listenersAttached=!0;let e=globalThis;if(typeof e.ErrorUtils<"u"){let r=e.ErrorUtils.getGlobalHandler?.();e.ErrorUtils.setGlobalHandler?.((s,n)=>{this.captureError(s,{platform:"react-native",fatal:n}).finally(()=>{typeof r=="function"&&r(s,n)})})}if(typeof window<"u"&&typeof window.addEventListener=="function"){window.addEventListener("error",r=>{let s=r.error instanceof Error?r.error:new Error(r.message||"Erro global");this.captureError(s,{url:r.filename||window.location.href,line:r.lineno,column:r.colno,platform:"browser"})}),window.addEventListener("unhandledrejection",r=>{let s=r.reason instanceof Error?r.reason:new Error(G(r.reason));this.captureError(s,{platform:"browser",url:window.location.href})});return}typeof process<"u"&&typeof process.on=="function"&&(process.on("uncaughtException",r=>{this.captureError(r,{platform:"node"})}),process.on("unhandledRejection",r=>{this.captureException(r,{platform:"node"})}))}sendError(e){return this.enqueue(this.endpoint,e)}sendApm(e){return this.enqueue(this.apmEndpoint,e)}enqueue(e,r){if(!this.initialized||!this.apiKey)return Promise.resolve();let s={id:I("event"),endpoint:e,payload:m(r),resolve:()=>{}};return new Promise(n=>{s.resolve=n,this.sendQueue.push(s),this.processQueue()})}async processQueue(){if(!(this.isProcessingQueue||!this.initialized||!this.apiKey)){this.isProcessingQueue=!0;try{for(;this.sendQueue.length>0;){let e=this.sendQueue.shift();if(e)try{await this.sendToEndpoint(e.endpoint,e.payload)}finally{e.resolve()}}}finally{if(this.isProcessingQueue=!1,this.sendQueue.length===0){let e=this.flushResolvers.splice(0);for(let r of e)r()}this.sendQueue.length>0&&this.processQueue()}}}async sendToEndpoint(e,r){let s=typeof fetch=="function"?fetch:void 0;if(!s)return;let n=b(r),i,a;try{typeof AbortController<"u"&&(i=new AbortController,a=setTimeout(()=>{i?.abort()},this.requestTimeoutMs));let u=typeof window<"u"&&typeof window.document<"u",c={method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(n),signal:i?.signal};if(u&&(c.keepalive=!0),!(await s(e,c)).ok)return}catch{return}finally{a!==void 0&&clearTimeout(a)}}},K="__DEVINSPECT_AUDIT_CORE_INSTANCE__",j=typeof globalThis<"u"?globalThis:{},l=j[K]||new A;j[K]=l;var X,_;X=[ue({providedIn:"root"})];var y=class{handleError(e){let r=e instanceof Error?e:new Error(String(e));l.captureError(r,{framework:"Angular",platform:typeof window<"u"?"browser":"server",url:typeof window<"u"?window.location.href:""}),console.error("[DevInspector Angular Error]:",e)}};_=C(null),y=B(_,0,"AuditAngularErrorHandler",X,y),O(_,1,y);var me=(t,e)=>{let r=t.urlWithParams||t.url||"";if(r&&l.isIngestUrl(r))return e(t);let s=l.createRequestId(),n=l.createTraceId(),i=l.createSpanId(),a=t.clone({setHeaders:{"x-devinspector-request-id":s,"x-devinspector-trace-id":n,"x-devinspector-span-id":i}}),u=typeof performance<"u"?performance.now():Date.now();return e(a).pipe(pe({next:c=>{if(!(c instanceof de))return;let d=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-u)),h=c.status||0;(h>=400||d>=l.getSlowThresholdMs())&&l.captureRequest({method:t.method||"GET",url:r,statusCode:h,durationMs:d,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),l.addBreadcrumb({type:"http",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:h,durationMs:d,requestId:s,traceId:n,spanId:i}})},error:c=>{let d=c instanceof ce?c:null,h=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-u)),o=d?.status||0,w=d?.message||d?.statusText||"Erro de rede no cliente";l.captureRequest({method:t.method||"GET",url:r,statusCode:o,durationMs:h,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),l.captureException(new Error(`HTTP Error ${o}: ${w}`),{url:r,method:t.method||"GET",status:o,statusText:d?.statusText||"",type:"angular_network_error",requestId:s,traceId:n,spanId:i}),l.addBreadcrumb({type:"http_error",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:o,durationMs:h,requestId:s,traceId:n,spanId:i,error:w}})}}))},Me=me;function Re(){return[{provide:ae,useClass:y}]}export{y as AuditAngularErrorHandler,l as audit,Me as auditInterceptor,me as devInspectorInterceptor,Re as provideDevInspector};
1
+ import{\u0275\u0275defineInjectable as q}from"@angular/core";import{HttpResponse as D,HttpErrorResponse as P}from"@angular/common/http";import{tap as Q}from"rxjs/operators";var w="https://api.devinspector.com.br/api/ingest/track",E="https://api.devinspector.com.br/api/ingest/apm";var U=["password","senha","token","authorization","auth","bearer","credit_card","creditcard","cartao","cvv","cpf","rg","secret","private_key","privatekey"];function S(t){let e=t.toLowerCase().replace(/[\s-]/g,"_");return U.some(r=>e.includes(r))}function m(t,e=0,r=new WeakSet){if(t==null)return t;if(typeof t=="string")return t.length>1e4?`${t.slice(0,1e4)}...[truncated]`:t;if(typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="bigint")return String(t);if(typeof t=="function")return"[Function]";if(e>=6)return"[MaxDepth]";if(typeof t!="object")return String(t);if(r.has(t))return"[Circular]";r.add(t);try{if(Array.isArray(t))return t.slice(0,100).map(i=>m(i,e+1,r));let s=t,n={};for(let[i,o]of Object.entries(s)){if(S(i)){n[i]="[REDACTED]";continue}n[i]=m(o,e+1,r)}return n}finally{r.delete(t)}}function v(t){if(t instanceof Error)return t.message||"Erro desconhecido";if(typeof t=="string")return t||"Erro desconhecido";try{let e=m(t);return typeof e=="string"?e||"Erro desconhecido":JSON.stringify(e)||"Erro desconhecido"}catch{return"Erro desconhecido"}}function I(t){return t&&String(t).trim().toUpperCase()||void 0}function T(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.round(t)}function M(t){if(!(typeof t!="number"||!Number.isFinite(t)))return Math.max(0,Math.round(t))}function k(t){return String(t??"").trim().slice(0,200)}function _(t){let e=Number(t);if(!Number.isFinite(e))throw new Error("metricValue deve ser um n\xFAmero finito.");return e}function g(t){let e=typeof globalThis<"u"?globalThis.crypto:void 0;return e&&typeof e.randomUUID=="function"?`${t}-${e.randomUUID()}`:`${t}-${Date.now()}-${Math.random().toString(36).slice(2,12)}`}function a(t){return m(t)}var b=class{constructor(){this.apiKey="";this.endpoint=w;this.apmEndpoint=E;this.environment="production";this.slowThresholdMs=300;this.requestTimeoutMs=1e4;this.breadcrumbs=[];this.initialized=!1;this.listenersAttached=!1;this.sendQueue=[];this.isProcessingQueue=!1;this.flushResolvers=[]}init(e){if(!e?.apiKey?.trim())throw new Error("DevInspector: apiKey \xE9 obrigat\xF3rio.");this.apiKey=e.apiKey.trim(),this.endpoint=e.endpoint?.trim()||w,this.apmEndpoint=e.apmEndpoint?.trim()||E,this.environment=e.environment?.trim()||"production",this.release=e.release?.trim()||void 0,this.slowThresholdMs=typeof e.slowThresholdMs=="number"&&Number.isFinite(e.slowThresholdMs)&&e.slowThresholdMs>=0?Math.round(e.slowThresholdMs):300,this.requestTimeoutMs=typeof e.requestTimeoutMs=="number"&&Number.isFinite(e.requestTimeoutMs)&&e.requestTimeoutMs>0?Math.round(e.requestTimeoutMs):1e4,this.initialized=!0,this.attachGlobalListeners(),this.processQueue()}getApiKey(){return this.apiKey}getEndpoint(){return this.endpoint}getApmEndpoint(){return this.apmEndpoint}getEnvironment(){return this.environment}getRelease(){return this.release}getSlowThresholdMs(){return this.slowThresholdMs}getRequestTimeoutMs(){return this.requestTimeoutMs}isInitialized(){return this.initialized}setUser(e){this.user=e?m(e):void 0}getUser(){return this.user}clearUser(){this.user=void 0}addBreadcrumb(e){if(!e||!e.type?.trim())return;let r={timestamp:e.timestamp||new Date().toISOString(),type:e.type.trim().slice(0,200),message:e.message?.slice(0,1e4),metadata:e.metadata?m(e.metadata):void 0};this.breadcrumbs.push(r),this.breadcrumbs.length>50&&(this.breadcrumbs=this.breadcrumbs.slice(-50))}getBreadcrumbs(){return this.breadcrumbs.map(e=>a(e))}clearBreadcrumbs(){this.breadcrumbs=[]}getContext(){return{environment:this.environment,release:this.release,user:a(this.user),breadcrumbs:this.getBreadcrumbs()}}isIngestUrl(e){if(!e)return!1;try{let r=new URL(this.endpoint),s=new URL(this.apmEndpoint),n=new URL(e,r.origin),i=n.origin,o=n.pathname.replace(/\/$/,""),c=r.pathname.replace(/\/$/,""),d=s.pathname.replace(/\/$/,"");return i===r.origin&&o===c||i===s.origin&&o===d}catch{return e.includes(this.endpoint)||e.includes(this.apmEndpoint)}}createRequestId(){return g("req")}createTraceId(){return g("trace")}createSpanId(){return g("span")}captureRequest(e){let r=I(e.method)||"GET",s=String(e.url||"").trim();if(!s)return Promise.resolve();let n=T(e.statusCode)??0,i=M(e.durationMs)??0,o={...e.metadata||{},...e.route!==void 0?{route:e.route}:{},...e.dbQueriesCount!==void 0?{dbQueriesCount:e.dbQueriesCount}:{},...e.slowQueryMs!==void 0?{slowQueryMs:e.slowQueryMs}:{},timestamp:new Date().toISOString()};return this.sendApm({type:"request_metric",method:r,url:s,statusCode:n,durationMs:i,browser:e.userAgent,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:a(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:a(o)})}captureDbQuery(e){let r=String(e.operation||"").trim();if(!r)return Promise.resolve();let s=M(e.durationMs)??0,n={...e.metadata||{},operation:r,collection:e.collection||"Unknown",durationMs:s,timestamp:new Date().toISOString()};return this.sendApm({type:"db_query",message:`Database operation: ${r}`,url:e.url,method:"DB",durationMs:s,requestId:e.requestId,traceId:e.traceId,spanId:e.spanId,environment:this.environment,release:this.release,user:a(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:a(n)})}captureMetric(e,r,s={},n={}){let i=k(e);if(!i)return Promise.resolve();let o;try{o=_(r)}catch{return Promise.resolve()}return this.sendApm({type:"custom_metric",metricName:i,metricValue:o,requestId:n.requestId,traceId:n.traceId,spanId:n.spanId,environment:this.environment,release:this.release,user:a(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:a({...s,timestamp:new Date().toISOString()})})}captureCustomMetric(e){return this.captureMetric(e.metricName,e.metricValue,e.metadata||{},{requestId:e.requestId,traceId:e.traceId,spanId:e.spanId})}captureError(e,r={}){let s=e?.message?.trim()||"Erro desconhecido",n={...r},i=I(n.method),o=T(n.statusCode??n.status),c=n.url!==void 0&&n.url!==null?String(n.url).trim():void 0;return delete n.method,delete n.statusCode,delete n.status,delete n.requestId,delete n.traceId,delete n.spanId,delete n.durationMs,this.sendError({type:"error",message:s,stackTrace:e?.stack||"",...c?{url:c}:{},...i?{method:i}:{},...o!==void 0?{statusCode:o}:{},environment:this.environment,release:this.release,user:a(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:a({...n,timestamp:new Date().toISOString()})})}captureException(e,r={}){let s=e instanceof Error?e:new Error(v(e));return this.captureError(s,r)}captureMessage(e,r={}){let s=String(e||"").trim();return s?this.sendApm({type:"message",message:s.slice(0,1e4),environment:this.environment,release:this.release,user:a(this.user),breadcrumbs:this.getBreadcrumbs(),metadata:a({...r,timestamp:new Date().toISOString()})}):Promise.resolve()}async flush(){if(!(this.sendQueue.length===0&&!this.isProcessingQueue))return new Promise(e=>{this.flushResolvers.push(e),this.processQueue()})}attachGlobalListeners(){if(this.listenersAttached||typeof globalThis>"u")return;this.listenersAttached=!0;let e=globalThis;if(typeof e.ErrorUtils<"u"){let r=e.ErrorUtils.getGlobalHandler?.();e.ErrorUtils.setGlobalHandler?.((s,n)=>{this.captureError(s,{platform:"react-native",fatal:n}).finally(()=>{typeof r=="function"&&r(s,n)})})}if(typeof window<"u"&&typeof window.addEventListener=="function"){window.addEventListener("error",r=>{let s=r.error instanceof Error?r.error:new Error(r.message||"Erro global");this.captureError(s,{url:r.filename||window.location.href,line:r.lineno,column:r.colno,platform:"browser"})}),window.addEventListener("unhandledrejection",r=>{let s=r.reason instanceof Error?r.reason:new Error(v(r.reason));this.captureError(s,{platform:"browser",url:window.location.href})});return}typeof process<"u"&&typeof process.on=="function"&&(process.on("uncaughtException",r=>{this.captureError(r,{platform:"node"})}),process.on("unhandledRejection",r=>{this.captureException(r,{platform:"node"})}))}sendError(e){return this.enqueue(this.endpoint,e)}sendApm(e){return this.enqueue(this.apmEndpoint,e)}enqueue(e,r){if(!this.initialized||!this.apiKey)return Promise.resolve();let s={id:g("event"),endpoint:e,payload:a(r),resolve:()=>{}};return new Promise(n=>{s.resolve=n,this.sendQueue.push(s),this.processQueue()})}async processQueue(){if(!(this.isProcessingQueue||!this.initialized||!this.apiKey)){this.isProcessingQueue=!0;try{for(;this.sendQueue.length>0;){let e=this.sendQueue.shift();if(e)try{await this.sendToEndpoint(e.endpoint,e.payload)}finally{e.resolve()}}}finally{if(this.isProcessingQueue=!1,this.sendQueue.length===0){let e=this.flushResolvers.splice(0);for(let r of e)r()}this.sendQueue.length>0&&this.processQueue()}}}async sendToEndpoint(e,r){let s=typeof fetch=="function"?fetch:void 0;if(!s)return;let n=m(r),i,o;try{typeof AbortController<"u"&&(i=new AbortController,o=setTimeout(()=>{i?.abort()},this.requestTimeoutMs));let c=typeof window<"u"&&typeof window.document<"u",d={method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(n),signal:i?.signal};if(c&&(d.keepalive=!0),!(await s(e,d)).ok)return}catch{return}finally{o!==void 0&&clearTimeout(o)}}},R="__DEVINSPECT_AUDIT_CORE_INSTANCE__",A=typeof globalThis<"u"?globalThis:{},u=A[R]||new b;A[R]=u;var l=class{handleError(e){let r=e instanceof Error?e:new Error(String(e));u.captureError(r,{framework:"Angular",platform:typeof window<"u"?"browser":"server",url:typeof window<"u"?window.location.href:""}),console.error("[DevInspector Angular Error]:",e)}};l.\u0275fac=t=>new(t||l);l.\u0275prov=q({token:l,factory:l.\u0275fac,providedIn:"root"});var x=(t,e)=>{let r=t.urlWithParams||t.url||"";if(r&&u.isIngestUrl(r))return e(t);let s=u.createRequestId(),n=u.createTraceId(),i=u.createSpanId(),o=t.clone({setHeaders:{"x-devinspector-request-id":s,"x-devinspector-trace-id":n,"x-devinspector-span-id":i}}),c=typeof performance<"u"?performance.now():Date.now();return e(o).pipe(Q({next:d=>{if(!(d instanceof D))return;let p=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-c)),f=d.status||0;(f>=400||p>=u.getSlowThresholdMs())&&u.captureRequest({method:t.method||"GET",url:r,statusCode:f,durationMs:p,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),u.addBreadcrumb({type:"http",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:f,durationMs:p,requestId:s,traceId:n,spanId:i}})},error:d=>{let p=d instanceof P?d:null,f=Math.max(0,Math.round((typeof performance<"u"?performance.now():Date.now())-c)),h=p?.status||0,y=p?.message||p?.statusText||"Erro de rede no cliente";u.captureRequest({method:t.method||"GET",url:r,statusCode:h,durationMs:f,route:t.url,requestId:s,traceId:n,spanId:i,userAgent:typeof navigator<"u"?navigator.userAgent:void 0}),u.captureException(new Error(`HTTP Error ${h}: ${y}`),{url:r,method:t.method||"GET",status:h,statusText:p?.statusText||"",type:"angular_network_error",requestId:s,traceId:n,spanId:i}),u.addBreadcrumb({type:"http_error",message:`${t.method||"GET"} ${r}`,metadata:{statusCode:h,durationMs:f,requestId:s,traceId:n,spanId:i,error:y}})}}))},K=x;export{l as AuditAngularErrorHandler,u as audit,K as auditInterceptor,x as devInspectorInterceptor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xcodleox/devinspector",
3
- "version": "9.0.1",
3
+ "version": "9.0.2",
4
4
  "description": "SDK de monitoramento e auditoria de erros em tempo real | Dev Inspector",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",