@sailfish-ai/sf-veritas 0.2.1 → 0.2.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/sf-veritas.cjs
CHANGED
|
@@ -142,4 +142,4 @@
|
|
|
142
142
|
gitSha: $gitSha,
|
|
143
143
|
)
|
|
144
144
|
}
|
|
145
|
-
`,t=this.getVariables({serviceIdentifier:l().serviceIdentifier,serviceVersion:l().serviceVersion,serviceAdditionalMetadata:l().serviceAdditionalMetadata,gitSha:l().gitSha||""});F(this.endpoint,this.operationName,e,t)}}function Ne(){return{capture_arguments:w(process.env.SF_FUNCSPAN_CAPTURE_ARGUMENTS,!0),capture_return_value:w(process.env.SF_FUNCSPAN_CAPTURE_RETURN_VALUE,!0),arg_limit_mb:parseInt(process.env.SF_FUNCSPAN_ARG_LIMIT_MB||"1",10),return_limit_mb:parseInt(process.env.SF_FUNCSPAN_RETURN_LIMIT_MB||"1",10),autocapture_all_child_functions:w(process.env.SF_FUNCSPAN_AUTOCAPTURE_ALL_CHILD_FUNCTIONS,!1),sample_rate:parseFloat(process.env.SF_FUNCSPAN_SAMPLE_RATE||"1.0"),enable_sampling:w(process.env.SF_FUNCSPAN_ENABLE_SAMPLING,!1),capture_sf_veritas:w(process.env.SF_FUNCSPAN_CAPTURE_SF_VERITAS,!1),parse_json_strings:w(process.env.SF_FUNCSPAN_PARSE_JSON_STRINGS,!1)}}function Pe(){return{capture_arguments:!1,capture_return_value:!1,arg_limit_mb:1,return_limit_mb:1,autocapture_all_child_functions:!1,sample_rate:1,enable_sampling:!1,capture_sf_veritas:!1,parse_json_strings:!1}}function pe(o){try{const e=o.split("-");return e.length!==9?(console.error(`[FuncSpan] Invalid header format: expected 9 parts, got ${e.length}`),null):{capture_arguments:e[0]==="1",capture_return_value:e[1]==="1",arg_limit_mb:parseInt(e[2],10),return_limit_mb:parseInt(e[3],10),autocapture_all_child_functions:e[4]==="1",sample_rate:parseFloat(e[5]),enable_sampling:e[6]==="1",capture_sf_veritas:e[7]==="1",parse_json_strings:e[8]==="1"}}catch(e){return console.error(`[FuncSpan] Failed to parse header override "${o}":`,e),null}}function w(o,e){if(!o)return e;const t=o.toLowerCase();return t==="true"||t==="1"||t==="yes"}const te=new ne.AsyncLocalStorage;function he(){return te.getStore()}function E(...o){const e={};for(const t of o)for(const i in t)t[i]!==void 0&&(e[i]=t[i]);return e}function ee(o,e){try{const t=JSON.stringify(o).length/1048576;return t<=e?o:{_truncated:!0,_originalSizeMB:t.toFixed(2),_limitMB:e,_preview:JSON.stringify(o).substring(0,500)+"..."}}catch{return{_error:"Failed to serialize data",_type:typeof o}}}class Me{constructor(e=[process.cwd()],t=!1){u(this,"rootPaths");u(this,"fileConfigs",new Map);u(this,"functionConfigs",new Map);u(this,"directoryConfigs",new Map);u(this,"hasSailfishFiles",!1);u(this,"debug");this.rootPaths=e,this.debug=t||process.env.SF_DEBUG==="true"}async loadAllConfigs(){this.debug&&console.log("[FuncSpan ConfigLoader] Scanning for .sailfish files in:",this.rootPaths);const e=[];for(const t of this.rootPaths)k.existsSync(t)?await this._walkDirectory(t,e):this.debug&&console.log(`[FuncSpan ConfigLoader] Root path does not exist: ${t}`);e.length>0?(this.hasSailfishFiles=!0,this.debug&&(console.log(`[FuncSpan ConfigLoader] Found ${e.length} .sailfish files:`),e.forEach(t=>console.log(`[FuncSpan ConfigLoader] - ${t}`)))):this.debug&&console.log("[FuncSpan ConfigLoader] No .sailfish files found - function spans disabled by default");for(const t of e)await this._loadConfigFile(t);await this._resolveInheritance(),this.debug&&console.log(`[FuncSpan ConfigLoader] Loaded ${this.fileConfigs.size} file configs, ${this.functionConfigs.size} function configs`)}getConfig(e,t){const i=this.hasSailfishFiles?Ne():{capture_arguments:!1,capture_return_value:!1,arg_limit_mb:1,return_limit_mb:1,autocapture_all_child_functions:!1,sample_rate:1,enable_sampling:!1,capture_sf_veritas:!1,parse_json_strings:!1},n=this._getDirectoryConfig(e),s=v.normalize(e),a=this.fileConfigs.get(s)||{};let r={};if(t){const g=this.functionConfigs.get(s);g&&(r=g.get(t)||{})}return E(i,n,a,r)}async _walkDirectory(e,t){try{const i=k.readdirSync(e,{withFileTypes:!0});for(const n of i){const s=v.join(e,n.name);n.name==="node_modules"||n.name===".git"||n.name.startsWith(".")||(n.isDirectory()?await this._walkDirectory(s,t):n.name===".sailfish"&&t.push(s))}}catch(i){this.debug&&console.error(`[FuncSpan ConfigLoader] Error walking directory ${e}:`,i)}}async _loadConfigFile(e){try{const t=k.readFileSync(e,"utf-8"),i=v.dirname(e);let n=null;try{n=JSON.parse(t)}catch{try{n=require("js-yaml").load(t)}catch(s){return void(this.debug&&console.error(`[FuncSpan ConfigLoader] Failed to parse ${e} as JSON or YAML:`,s))}}if(!n)return;n.default&&this.directoryConfigs.set(i,n.default),n.files&&await this._expandFileGlobs(i,n.files,n.default||{}),n.functions&&this._storeFunctionConfigs(i,n.functions,n.default||{}),this.debug&&(console.log(`[FuncSpan ConfigLoader] Loaded config from ${e}`),console.log(`[FuncSpan ConfigLoader] Directory: ${i}`),console.log(`[FuncSpan ConfigLoader] Has default: ${!!n.default}`),console.log(`[FuncSpan ConfigLoader] File patterns: ${Object.keys(n.files||{}).length}`),console.log(`[FuncSpan ConfigLoader] Functions: ${Object.keys(n.functions||{}).length}`))}catch(t){this.debug&&console.error(`[FuncSpan ConfigLoader] Error loading ${e}:`,t)}}async _expandFileGlobs(e,t,i){for(const[n,s]of Object.entries(t))try{const a=v.join(e,n),r=await He.glob(a,{absolute:!0,nodir:!0,ignore:["**/node_modules/**","**/.git/**"]});this.debug&&console.log(`[FuncSpan ConfigLoader] Pattern '${n}' matched ${r.length} files`);for(const g of r){const c=v.normalize(g),I=E(i,s);this.fileConfigs.set(c,I),this.debug&&r.length<=5&&console.log(`[FuncSpan ConfigLoader] - ${g}`)}}catch(a){this.debug&&console.error(`[FuncSpan ConfigLoader] Error expanding glob '${n}':`,a)}}_storeFunctionConfigs(e,t,i){for(const[n,s]of Object.entries(t)){const a=n.split("::");if(a.length!==2){this.debug&&console.warn(`[FuncSpan ConfigLoader] Invalid function pattern '${n}' (expected format: 'file.ts::functionName')`);continue}const[r,g]=a,c=v.normalize(v.join(e,r));this.functionConfigs.has(c)||this.functionConfigs.set(c,new Map);const I=this.functionConfigs.get(c),d=E(i,s);I.set(g,d),this.debug&&console.log(`[FuncSpan ConfigLoader] Function config: ${c}::${g}`)}}async _resolveInheritance(){}_getDirectoryConfig(e){let t=v.dirname(v.normalize(e));const i=[];for(;t&&t!==v.dirname(t);){const n=this.directoryConfigs.get(t);n&&i.unshift(n),t=v.dirname(t)}return i.reduce((n,s)=>E(n,s),{})}}let J=null;async function Ae(o,e){J=new Me(o,e),await J.loadAllConfigs()}function be(o,e){return J?J.getConfig(o,e):{capture_arguments:!1,capture_return_value:!1,arg_limit_mb:1,return_limit_mb:1,autocapture_all_child_functions:!1,sample_rate:1,enable_sampling:!1,capture_sf_veritas:!1,parse_json_strings:!1}}function me(){return J!==null}function D(o){process.env.SF_VERITAS_DEBUG==="true"&&console.log("[FuncSpan Capture]",{function:o.functionName,file:o.filePath,duration:`${o.duration}ms`,async:o.async,error:o.error}),ve(()=>{})}exports.ContextManager=G,exports.addOrUpdateMetadata=function(o,e={},t,i=!1){const n=l();new ge(n.apiKey).addOrUpdateMetadata(o,e,t,i)},exports.captureFunctionSpan=function(o,e,t,i){const n=function(...s){const a=(function(C,p){const h=he();if(h){const A=pe(h);if(A)return process.env.SF_DEBUG==="true"&&console.log(`[FuncSpan] Using HTTP header override for ${C}::${p}`),A}return be(C,p)})(t,e);if(a.enable_sampling&&a.sample_rate<1&&Math.random()>a.sample_rate)return o.apply(this,s);if(a.sample_rate===0)return o.apply(this,s);const r=G.getInstance(),g=r.getCurrentFunctionSpanId(),c=H();r.setCurrentFunctionSpanId(c);const I=Date.now();let d=null;a.capture_arguments&&(d={},i.paramNames.forEach((C,p)=>{p<s.length&&(d[C]=s[p])}),d&&a.arg_limit_mb>0&&(d=ee(d,a.arg_limit_mb)));try{const C=o.apply(this,s);if(C&&typeof C.then=="function")return C.then(A=>{const m=Date.now();let Z=null;return a.capture_return_value&&a.return_limit_mb>0&&(Z=ee(A,a.return_limit_mb)),D({functionName:e,filePath:t,metadata:i,args:d,result:Z,error:null,duration:m-I,async:!0,spanId:c}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),A},A=>{const m=Date.now();throw D({functionName:e,filePath:t,metadata:i,args:d,result:null,error:A?.message||String(A),duration:m-I,async:!0,spanId:c}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),A});const p=Date.now();let h=null;return a.capture_return_value&&a.return_limit_mb>0&&(h=ee(C,a.return_limit_mb)),D({functionName:e,filePath:t,metadata:i,args:d,result:h,error:null,duration:p-I,async:!1,spanId:c}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),C}catch(C){const p=Date.now();throw D({functionName:e,filePath:t,error:C?.message||String(C),duration:p-I,async:!1}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),C}};Object.defineProperty(n,"name",{value:e,writable:!1});for(const s in o)o.hasOwnProperty(s)&&(n[s]=o[s]);return n},exports.clearFuncspanOverride=function(){te.enterWith(void 0)},exports.getCurrentFunctionSpanId=L,exports.getDefaultConfig=Pe,exports.getEnvConfig=Ne,exports.getFuncspanOverride=he,exports.getGlobalConfig=be,exports.identify=function(o,e,t,i=!1){const n=l();new ge(n.apiKey).identify(o,e,t,i)},exports.initializeConfigLoader=Ae,exports.isConfigLoaderInitialized=me,exports.parseHeaderOverride=pe,exports.runWithContext=ve,exports.setFuncspanOverride=function(o){te.enterWith(o)},exports.setupInterceptors=function(o){if(!o||!o.apiKey){const n=`The required API Key is not provided: ${JSON.stringify(o)}`;console.error(n)}const{config:e}=Ke(o);if(e.sfDebug&&console.log("Updated configuration after applying options:",e),!e.apiKey||!e.apiGraphqlEndpoint){const n=`The required config is not provided: ${JSON.stringify(e)}`;throw console.error(n),new Error(n)}me()||Ae(void 0,e.sfDebug).catch(n=>{e.sfDebug&&console.error("[FuncSpan] Failed to initialize config loader:",n)});const t=new oe;t.setServiceUUID(e.serviceUUID),(function(n){function s(d,C){n.setOperationName("CollectLogs"),n.doSend([C,d])}const a=console.log.bind(console),r=console.error.bind(console),g=console.warn.bind(console),c=console.info.bind(console),I=console.debug.bind(console);console.log=(...d)=>{s("INFO",d.join(" ")),a(...d)},console.error=(...d)=>{s("ERROR",d.join(" ")),r(...d)},console.warn=(...d)=>{s("WARN",d.join(" ")),g(...d)},console.info=(...d)=>{s("INFO",d.join(" ")),c(...d)},l().logLevel==="DEBUG"&&(console.debug=(...d)=>{s("DEBUG",d.join(" ")),I(...d)})})(t),(function(n=[]){const s=new ke(n);new ze().doSend(s.getExcludedDomains());const a=new xe,r=new $e;s.patchFetch(a,r),s.patchHttp(a,r)})(e.domainsToNotPropagateHeadersTo);const i=new De;i.setServiceUUID(e.serviceUUID),Te(i),Le(),new Oe().send()};
|
|
145
|
+
`,t=this.getVariables({serviceIdentifier:l().serviceIdentifier,serviceVersion:l().serviceVersion,serviceAdditionalMetadata:l().serviceAdditionalMetadata,gitSha:l().gitSha||""});F(this.endpoint,this.operationName,e,t)}}function Ne(){return{capture_arguments:w(process.env.SF_FUNCSPAN_CAPTURE_ARGUMENTS,!0),capture_return_value:w(process.env.SF_FUNCSPAN_CAPTURE_RETURN_VALUE,!0),arg_limit_mb:parseInt(process.env.SF_FUNCSPAN_ARG_LIMIT_MB||"1",10),return_limit_mb:parseInt(process.env.SF_FUNCSPAN_RETURN_LIMIT_MB||"1",10),autocapture_all_child_functions:w(process.env.SF_FUNCSPAN_AUTOCAPTURE_ALL_CHILD_FUNCTIONS,!1),sample_rate:parseFloat(process.env.SF_FUNCSPAN_SAMPLE_RATE||"1.0"),enable_sampling:w(process.env.SF_FUNCSPAN_ENABLE_SAMPLING,!1),capture_sf_veritas:w(process.env.SF_FUNCSPAN_CAPTURE_SF_VERITAS,!1),parse_json_strings:w(process.env.SF_FUNCSPAN_PARSE_JSON_STRINGS,!1)}}function Pe(){return{capture_arguments:!1,capture_return_value:!1,arg_limit_mb:1,return_limit_mb:1,autocapture_all_child_functions:!1,sample_rate:0,enable_sampling:!1,capture_sf_veritas:!1,parse_json_strings:!1}}function pe(o){try{const e=o.split("-");return e.length!==9?(console.error(`[FuncSpan] Invalid header format: expected 9 parts, got ${e.length}`),null):{capture_arguments:e[0]==="1",capture_return_value:e[1]==="1",arg_limit_mb:parseInt(e[2],10),return_limit_mb:parseInt(e[3],10),autocapture_all_child_functions:e[4]==="1",sample_rate:parseFloat(e[5]),enable_sampling:e[6]==="1",capture_sf_veritas:e[7]==="1",parse_json_strings:e[8]==="1"}}catch(e){return console.error(`[FuncSpan] Failed to parse header override "${o}":`,e),null}}function w(o,e){if(!o)return e;const t=o.toLowerCase();return t==="true"||t==="1"||t==="yes"}const te=new ne.AsyncLocalStorage;function he(){return te.getStore()}function E(...o){const e={};for(const t of o)for(const i in t)t[i]!==void 0&&(e[i]=t[i]);return e}function ee(o,e){try{const t=JSON.stringify(o).length/1048576;return t<=e?o:{_truncated:!0,_originalSizeMB:t.toFixed(2),_limitMB:e,_preview:JSON.stringify(o).substring(0,500)+"..."}}catch{return{_error:"Failed to serialize data",_type:typeof o}}}class Me{constructor(e=[process.cwd()],t=!1){u(this,"rootPaths");u(this,"fileConfigs",new Map);u(this,"functionConfigs",new Map);u(this,"directoryConfigs",new Map);u(this,"hasSailfishFiles",!1);u(this,"debug");this.rootPaths=e,this.debug=t||process.env.SF_DEBUG==="true"}async loadAllConfigs(){this.debug&&console.log("[FuncSpan ConfigLoader] Scanning for .sailfish files in:",this.rootPaths);const e=[];for(const t of this.rootPaths)k.existsSync(t)?await this._walkDirectory(t,e):this.debug&&console.log(`[FuncSpan ConfigLoader] Root path does not exist: ${t}`);e.length>0?(this.hasSailfishFiles=!0,this.debug&&(console.log(`[FuncSpan ConfigLoader] Found ${e.length} .sailfish files:`),e.forEach(t=>console.log(`[FuncSpan ConfigLoader] - ${t}`)))):this.debug&&console.log("[FuncSpan ConfigLoader] No .sailfish files found - function spans disabled by default");for(const t of e)await this._loadConfigFile(t);await this._resolveInheritance(),this.debug&&console.log(`[FuncSpan ConfigLoader] Loaded ${this.fileConfigs.size} file configs, ${this.functionConfigs.size} function configs`)}getConfig(e,t){const i=this.hasSailfishFiles?Ne():{capture_arguments:!1,capture_return_value:!1,arg_limit_mb:1,return_limit_mb:1,autocapture_all_child_functions:!1,sample_rate:0,enable_sampling:!1,capture_sf_veritas:!1,parse_json_strings:!1},n=this._getDirectoryConfig(e),s=v.normalize(e),a=this.fileConfigs.get(s)||{};let r={};if(t){const g=this.functionConfigs.get(s);g&&(r=g.get(t)||{})}return E(i,n,a,r)}async _walkDirectory(e,t){try{const i=k.readdirSync(e,{withFileTypes:!0});for(const n of i){const s=v.join(e,n.name);n.name==="node_modules"||n.name===".git"||n.name.startsWith(".")||(n.isDirectory()?await this._walkDirectory(s,t):n.name===".sailfish"&&t.push(s))}}catch(i){this.debug&&console.error(`[FuncSpan ConfigLoader] Error walking directory ${e}:`,i)}}async _loadConfigFile(e){try{const t=k.readFileSync(e,"utf-8"),i=v.dirname(e);let n=null;try{n=JSON.parse(t)}catch{try{n=require("js-yaml").load(t)}catch(s){return void(this.debug&&console.error(`[FuncSpan ConfigLoader] Failed to parse ${e} as JSON or YAML:`,s))}}if(!n)return;n.default&&this.directoryConfigs.set(i,n.default),n.files&&await this._expandFileGlobs(i,n.files,n.default||{}),n.functions&&this._storeFunctionConfigs(i,n.functions,n.default||{}),this.debug&&(console.log(`[FuncSpan ConfigLoader] Loaded config from ${e}`),console.log(`[FuncSpan ConfigLoader] Directory: ${i}`),console.log(`[FuncSpan ConfigLoader] Has default: ${!!n.default}`),console.log(`[FuncSpan ConfigLoader] File patterns: ${Object.keys(n.files||{}).length}`),console.log(`[FuncSpan ConfigLoader] Functions: ${Object.keys(n.functions||{}).length}`))}catch(t){this.debug&&console.error(`[FuncSpan ConfigLoader] Error loading ${e}:`,t)}}async _expandFileGlobs(e,t,i){for(const[n,s]of Object.entries(t))try{const a=v.join(e,n),r=await He.glob(a,{absolute:!0,nodir:!0,ignore:["**/node_modules/**","**/.git/**"]});this.debug&&console.log(`[FuncSpan ConfigLoader] Pattern '${n}' matched ${r.length} files`);for(const g of r){const c=v.normalize(g),I=E(i,s);this.fileConfigs.set(c,I),this.debug&&r.length<=5&&console.log(`[FuncSpan ConfigLoader] - ${g}`)}}catch(a){this.debug&&console.error(`[FuncSpan ConfigLoader] Error expanding glob '${n}':`,a)}}_storeFunctionConfigs(e,t,i){for(const[n,s]of Object.entries(t)){const a=n.split("::");if(a.length!==2){this.debug&&console.warn(`[FuncSpan ConfigLoader] Invalid function pattern '${n}' (expected format: 'file.ts::functionName')`);continue}const[r,g]=a,c=v.normalize(v.join(e,r));this.functionConfigs.has(c)||this.functionConfigs.set(c,new Map);const I=this.functionConfigs.get(c),d=E(i,s);I.set(g,d),this.debug&&console.log(`[FuncSpan ConfigLoader] Function config: ${c}::${g}`)}}async _resolveInheritance(){}_getDirectoryConfig(e){let t=v.dirname(v.normalize(e));const i=[];for(;t&&t!==v.dirname(t);){const n=this.directoryConfigs.get(t);n&&i.unshift(n),t=v.dirname(t)}return i.reduce((n,s)=>E(n,s),{})}}let J=null;async function Ae(o,e){J=new Me(o,e),await J.loadAllConfigs()}function be(o,e){return J?J.getConfig(o,e):{capture_arguments:!1,capture_return_value:!1,arg_limit_mb:1,return_limit_mb:1,autocapture_all_child_functions:!1,sample_rate:0,enable_sampling:!1,capture_sf_veritas:!1,parse_json_strings:!1}}function me(){return J!==null}function D(o){process.env.SF_VERITAS_DEBUG==="true"&&console.log("[FuncSpan Capture]",{function:o.functionName,file:o.filePath,duration:`${o.duration}ms`,async:o.async,error:o.error}),ve(()=>{})}exports.ContextManager=G,exports.addOrUpdateMetadata=function(o,e={},t,i=!1){const n=l();new ge(n.apiKey).addOrUpdateMetadata(o,e,t,i)},exports.captureFunctionSpan=function(o,e,t,i){const n=function(...s){const a=(function(C,p){const h=he();if(h){const A=pe(h);if(A)return process.env.SF_DEBUG==="true"&&console.log(`[FuncSpan] Using HTTP header override for ${C}::${p}`),A}return be(C,p)})(t,e);if(a.enable_sampling&&a.sample_rate<1&&Math.random()>a.sample_rate)return o.apply(this,s);if(a.sample_rate===0)return o.apply(this,s);const r=G.getInstance(),g=r.getCurrentFunctionSpanId(),c=H();r.setCurrentFunctionSpanId(c);const I=Date.now();let d=null;a.capture_arguments&&(d={},i.paramNames.forEach((C,p)=>{p<s.length&&(d[C]=s[p])}),d&&a.arg_limit_mb>0&&(d=ee(d,a.arg_limit_mb)));try{const C=o.apply(this,s);if(C&&typeof C.then=="function")return C.then(A=>{const m=Date.now();let Z=null;return a.capture_return_value&&a.return_limit_mb>0&&(Z=ee(A,a.return_limit_mb)),D({functionName:e,filePath:t,metadata:i,args:d,result:Z,error:null,duration:m-I,async:!0,spanId:c}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),A},A=>{const m=Date.now();throw D({functionName:e,filePath:t,metadata:i,args:d,result:null,error:A?.message||String(A),duration:m-I,async:!0,spanId:c}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),A});const p=Date.now();let h=null;return a.capture_return_value&&a.return_limit_mb>0&&(h=ee(C,a.return_limit_mb)),D({functionName:e,filePath:t,metadata:i,args:d,result:h,error:null,duration:p-I,async:!1,spanId:c}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),C}catch(C){const p=Date.now();throw D({functionName:e,filePath:t,error:C?.message||String(C),duration:p-I,async:!1}),g?r.setCurrentFunctionSpanId(g):r.clearCurrentFunctionSpanId(),C}};Object.defineProperty(n,"name",{value:e,writable:!1});for(const s in o)o.hasOwnProperty(s)&&(n[s]=o[s]);return n},exports.clearFuncspanOverride=function(){te.enterWith(void 0)},exports.getCurrentFunctionSpanId=L,exports.getDefaultConfig=Pe,exports.getEnvConfig=Ne,exports.getFuncspanOverride=he,exports.getGlobalConfig=be,exports.identify=function(o,e,t,i=!1){const n=l();new ge(n.apiKey).identify(o,e,t,i)},exports.initializeConfigLoader=Ae,exports.isConfigLoaderInitialized=me,exports.parseHeaderOverride=pe,exports.runWithContext=ve,exports.setFuncspanOverride=function(o){te.enterWith(o)},exports.setupInterceptors=function(o){if(!o||!o.apiKey){const n=`The required API Key is not provided: ${JSON.stringify(o)}`;console.error(n)}const{config:e}=Ke(o);if(e.sfDebug&&console.log("Updated configuration after applying options:",e),!e.apiKey||!e.apiGraphqlEndpoint){const n=`The required config is not provided: ${JSON.stringify(e)}`;throw console.error(n),new Error(n)}me()||Ae(void 0,e.sfDebug).catch(n=>{e.sfDebug&&console.error("[FuncSpan] Failed to initialize config loader:",n)});const t=new oe;t.setServiceUUID(e.serviceUUID),(function(n){function s(d,C){n.setOperationName("CollectLogs"),n.doSend([C,d])}const a=console.log.bind(console),r=console.error.bind(console),g=console.warn.bind(console),c=console.info.bind(console),I=console.debug.bind(console);console.log=(...d)=>{s("INFO",d.join(" ")),a(...d)},console.error=(...d)=>{s("ERROR",d.join(" ")),r(...d)},console.warn=(...d)=>{s("WARN",d.join(" ")),g(...d)},console.info=(...d)=>{s("INFO",d.join(" ")),c(...d)},l().logLevel==="DEBUG"&&(console.debug=(...d)=>{s("DEBUG",d.join(" ")),I(...d)})})(t),(function(n=[]){const s=new ke(n);new ze().doSend(s.getExcludedDomains());const a=new xe,r=new $e;s.patchFetch(a,r),s.patchHttp(a,r)})(e.domainsToNotPropagateHeadersTo);const i=new De;i.setServiceUUID(e.serviceUUID),Te(i),Le(),new Oe().send()};
|
package/dist/sf-veritas.mjs
CHANGED
|
@@ -987,7 +987,7 @@ function Ee() {
|
|
|
987
987
|
return { capture_arguments: w(process.env.SF_FUNCSPAN_CAPTURE_ARGUMENTS, !0), capture_return_value: w(process.env.SF_FUNCSPAN_CAPTURE_RETURN_VALUE, !0), arg_limit_mb: parseInt(process.env.SF_FUNCSPAN_ARG_LIMIT_MB || "1", 10), return_limit_mb: parseInt(process.env.SF_FUNCSPAN_RETURN_LIMIT_MB || "1", 10), autocapture_all_child_functions: w(process.env.SF_FUNCSPAN_AUTOCAPTURE_ALL_CHILD_FUNCTIONS, !1), sample_rate: parseFloat(process.env.SF_FUNCSPAN_SAMPLE_RATE || "1.0"), enable_sampling: w(process.env.SF_FUNCSPAN_ENABLE_SAMPLING, !1), capture_sf_veritas: w(process.env.SF_FUNCSPAN_CAPTURE_SF_VERITAS, !1), parse_json_strings: w(process.env.SF_FUNCSPAN_PARSE_JSON_STRINGS, !1) };
|
|
988
988
|
}
|
|
989
989
|
function et() {
|
|
990
|
-
return { capture_arguments: !1, capture_return_value: !1, arg_limit_mb: 1, return_limit_mb: 1, autocapture_all_child_functions: !1, sample_rate:
|
|
990
|
+
return { capture_arguments: !1, capture_return_value: !1, arg_limit_mb: 1, return_limit_mb: 1, autocapture_all_child_functions: !1, sample_rate: 0, enable_sampling: !1, capture_sf_veritas: !1, parse_json_strings: !1 };
|
|
991
991
|
}
|
|
992
992
|
function De(s) {
|
|
993
993
|
try {
|
|
@@ -1044,7 +1044,7 @@ class ze {
|
|
|
1044
1044
|
await this._resolveInheritance(), this.debug && console.log(`[FuncSpan ConfigLoader] Loaded ${this.fileConfigs.size} file configs, ${this.functionConfigs.size} function configs`);
|
|
1045
1045
|
}
|
|
1046
1046
|
getConfig(e, t) {
|
|
1047
|
-
const i = this.hasSailfishFiles ? Ee() : { capture_arguments: !1, capture_return_value: !1, arg_limit_mb: 1, return_limit_mb: 1, autocapture_all_child_functions: !1, sample_rate:
|
|
1047
|
+
const i = this.hasSailfishFiles ? Ee() : { capture_arguments: !1, capture_return_value: !1, arg_limit_mb: 1, return_limit_mb: 1, autocapture_all_child_functions: !1, sample_rate: 0, enable_sampling: !1, capture_sf_veritas: !1, parse_json_strings: !1 }, n = this._getDirectoryConfig(e), o = v.normalize(e), a = this.fileConfigs.get(o) || {};
|
|
1048
1048
|
let r = {};
|
|
1049
1049
|
if (t) {
|
|
1050
1050
|
const g = this.functionConfigs.get(o);
|
|
@@ -1124,7 +1124,7 @@ async function xe(s, e) {
|
|
|
1124
1124
|
J = new ze(s, e), await J.loadAllConfigs();
|
|
1125
1125
|
}
|
|
1126
1126
|
function $e(s, e) {
|
|
1127
|
-
return J ? J.getConfig(s, e) : { capture_arguments: !1, capture_return_value: !1, arg_limit_mb: 1, return_limit_mb: 1, autocapture_all_child_functions: !1, sample_rate:
|
|
1127
|
+
return J ? J.getConfig(s, e) : { capture_arguments: !1, capture_return_value: !1, arg_limit_mb: 1, return_limit_mb: 1, autocapture_all_child_functions: !1, sample_rate: 0, enable_sampling: !1, capture_sf_veritas: !1, parse_json_strings: !1 };
|
|
1128
1128
|
}
|
|
1129
1129
|
function ke() {
|
|
1130
1130
|
return J !== null;
|
|
@@ -46,6 +46,9 @@ export interface FuncspanHeaderOverride extends FuncspanConfig {
|
|
|
46
46
|
export declare function getEnvConfig(): FuncspanConfig;
|
|
47
47
|
/**
|
|
48
48
|
* Default configuration (used when no .sailfish files exist)
|
|
49
|
+
*
|
|
50
|
+
* Sets sample_rate to 0.0 to completely disable capture when no .sailfish files are present.
|
|
51
|
+
* This makes function span capture opt-in: you must create a .sailfish file to enable it.
|
|
49
52
|
*/
|
|
50
53
|
export declare function getDefaultConfig(): FuncspanConfig;
|
|
51
54
|
/**
|
package/package.json
CHANGED