@sailfish-ai/sf-veritas 0.2.4 → 0.2.6
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 +120 -0
- package/dist/funcSpanTransformer-TjdooSrw.cjs +1 -0
- package/dist/funcSpanTransformer-sqmZLAcs.js +750 -0
- package/dist/plugins/funcspanEsbuildPlugin.cjs +1 -1
- package/dist/plugins/funcspanEsbuildPlugin.mjs +1 -1
- package/dist/plugins/funcspanRollupPlugin.cjs +1 -1
- package/dist/plugins/funcspanRollupPlugin.mjs +1 -1
- package/dist/plugins/funcspanTscPlugin.cjs +1 -1
- package/dist/plugins/funcspanTscPlugin.mjs +1 -1
- package/dist/plugins/funcspanVitePlugin.cjs +1 -1
- package/dist/plugins/funcspanVitePlugin.mjs +1 -1
- package/dist/plugins/funcspanWebpackLoader.cjs +1 -1
- package/dist/plugins/funcspanWebpackLoader.mjs +65 -8
- package/dist/plugins/funcspanWebpackPlugin.cjs +1 -1
- package/dist/plugins/funcspanWebpackPlugin.mjs +24 -24
- package/dist/runtime/register.cjs +1 -0
- package/dist/runtime/register.mjs +27 -0
- package/dist/sf-veritas.cjs +16 -52
- package/dist/sf-veritas.mjs +573 -811
- package/dist/types/functionSpanTransmitter.d.ts +15 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/patches/workerPool/argumentCapture.d.ts +47 -0
- package/dist/types/patches/workerPool/index.d.ts +19 -0
- package/dist/types/patches/workerPool/patchCrypto.d.ts +9 -0
- package/dist/types/patches/workerPool/patchDns.d.ts +10 -0
- package/dist/types/patches/workerPool/patchFs.d.ts +9 -0
- package/dist/types/patches/workerPool/patchZlib.d.ts +9 -0
- package/dist/types/patches/workerPool/workerPoolTypes.d.ts +70 -0
- package/dist/types/plugins/funcspanWebpackPlugin.d.ts +20 -0
- package/dist/types/plugins/workerPoolTransformer.d.ts +42 -0
- package/dist/types/requestUtils.d.ts +1 -0
- package/dist/types/runtime/register.d.ts +56 -0
- package/dist/types/worker-pool-capture.d.ts +9 -0
- package/dist/types/workerPoolConfig.d.ts +22 -0
- package/dist/types/workerPoolSpanCapture.d.ts +36 -0
- package/dist/worker-pool-capture.cjs +1 -0
- package/dist/worker-pool-capture.mjs +4 -0
- package/dist/workerPoolSpanCapture-BOnYC4s3.js +705 -0
- package/dist/workerPoolSpanCapture-CNEouInA.cjs +83 -0
- package/package.json +17 -1
- package/dist/funcSpanTransformer-CTddGtUV.cjs +0 -1
- package/dist/funcSpanTransformer-coYDqcrs.js +0 -136
- package/dist/source-map-Cr6YkjTd.js +0 -631
- package/dist/source-map-rHHEdpre.cjs +0 -1
package/dist/sf-veritas.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var ue=Object.defineProperty;var Ce=(o,e,n)=>e in o?ue(o,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[e]=n;var A=(o,e,n)=>Ce(o,typeof e!="symbol"?e+"":e,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./workerPoolSpanCapture-CNEouInA.cjs"),X=require("fs"),D=require("./funcSpanTransformer-TjdooSrw.cjs"),N=require("worker_threads"),pe=require("node:module"),me=require("path"),he=require("glob");var k=typeof document<"u"?document.currentScript:null;function de(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const n in o)if(n!=="default"){const i=Object.getOwnPropertyDescriptor(o,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:()=>o[n]})}}return e.default=o,Object.freeze(e)}const T=de(X),S=de(me);class V extends r.BaseTransmitter{constructor(){super(),this.setOperationName("IdentifyServiceDetails")}async doSend(e){if(!r.getConfig().serviceIdentificationReceived)try{this.send()}catch(n){r.getConfig().sfDebug&&console.error(" Error during service identification:",n)}}async send(){const e=`
|
|
2
2
|
${this.queryType} ${this.operationName}(
|
|
3
3
|
$apiKey: String!,
|
|
4
4
|
$timestampMs: String!,
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
gitSha: $gitSha,
|
|
23
23
|
)
|
|
24
24
|
}
|
|
25
|
-
`,
|
|
25
|
+
`,n=this.getVariables({serviceIdentifier:r.getConfig().serviceIdentifier,serviceVersion:r.getConfig().serviceVersion,library:r.getConfig().packageLibraryType,version:r.getConfig().version,serviceAdditionalMetadata:r.getConfig().serviceAdditionalMetadata,gitSha:r.getConfig().gitSha||""});r.nonBlockingPost(this.endpoint,this.operationName,e,n)}}function be(o){try{return JSON.stringify(o),!0}catch{return!1}}class Ae extends r.BaseTransmitter{constructor(){super();A(this,"serviceIdentifier",new V);this.setOperationName("CollectMetadata")}async sendAppIdentifier(){this.serviceIdentifier.doSend({})}async doSend(n,i,t,s){this.sendAppIdentifier(),this.send(n,i,t,s)}async send(n,i,t,s){if(!i&&!s)throw new Error('Must pass in either traits or traits_json to "add_or_update_traits"');let l=[];if(!s){const g=(function(c){const d={},I=[];if(c)for(const[p,C]of Object.entries(c))be(C)?d[p]=C:I.push(p);return{traitsJson:JSON.stringify(d),excludedFields:I}})(i);s=g.traitsJson,l=g.excludedFields}const a=this.getVariables({userId:n,traitsJson:s,excludedFields:l,override:t,library:r.getConfig().packageLibraryType,version:r.getConfig().version});r.nonBlockingPost(this.endpoint,this.operationName,this.getQuery(),a)}getQuery(){return`
|
|
26
26
|
mutation ${this.operationName}($apiKey: String!, $serviceUuid: String!, $sessionId: String!, $userId: String!, $traitsJson: String!, $excludedFields: [String!]!, $library: String!, $timestampMs: String!, $version: String!, $override: Boolean!) {
|
|
27
27
|
${this.queryName}(apiKey: $apiKey, serviceUuid: $serviceUuid, sessionId: $sessionId, userId: $userId, traitsJson: $traitsJson, excludedFields: $excludedFields, library: $library, timestampMs: $timestampMs, version: $version, override: $override)
|
|
28
28
|
}
|
|
29
|
-
`}}class
|
|
29
|
+
`}}class O{constructor(e){A(this,"metadataTransmitter");this.apiKey=e,this.metadataTransmitter=new Ae}identify(e,n,i,t=!1){n||i?this.addOrUpdateMetadata(e,n,i,t):this.addOrUpdateMetadata(e,{},void 0,t)}addOrUpdateMetadata(e,n={},i,t=!1){if(!n&&!i)throw new Error('Must pass in either traits or traitsJson to "addOrUpdateMetadata"');r.getConfig().sfDebug&&console.log(" [[DEBUG - addOrUpdateMetadata]] Starting operation"),r.getConfig().sfDebug&&console.log(" addOrUpdateMetadata...SENDING DATA...",e,n,i),this.metadataTransmitter.doSend(e,n,t,i)}}class P extends r.BaseTransmitter{constructor(){super();A(this,"serviceIdentifier",new V)}async sendAppIdentifier(){this.serviceIdentifier.doSend({})}async doSend(n){this.sendAppIdentifier(),this.send(n)}async send(n){try{const i=Array.isArray(n)?n:[n,"default"],t=this.getVariables({contents:i[0],level:i[1]});r.nonBlockingPost(this.endpoint,this.operationName,this.getQuery(),t)}catch(i){r.getConfig().sfDebug&&console.error("🚨 Error in send():",i)}}getQuery(){return`
|
|
30
30
|
${this.queryType} ${this.operationName}(
|
|
31
31
|
$apiKey: String!,
|
|
32
32
|
$serviceUuid: String!,
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
parentSpanId: $parentSpanId
|
|
47
47
|
)
|
|
48
48
|
}
|
|
49
|
-
`}}const N={};class T{constructor({file:e,line:t,function:n,code:i,locals:s={},offender:g=!1,column:r}){C(this,"file");C(this,"line");C(this,"function");C(this,"code");C(this,"locals");C(this,"offender");C(this,"column");this.file=e,this.line=t,this.function=n,this.code=i,this.locals=s,this.offender=g,this.column=r}toDict(){const e={file:this.file,line:this.line,function:this.function,code:this.code,locals:Object.fromEntries(Object.entries(this.locals).map(([t,n])=>[t,String(n)]))};return this.offender&&(e.offender=this.offender),this.column!==void 0&&(e.column=this.column),e}toJson(){return JSON.stringify(this.toDict())}}class z{static encode(e){return e instanceof T?e.toDict():Array.isArray(e)?e.map(t=>z.encode(t)):typeof e=="object"&&e!==null?JSON.stringify(e):e}static stringify(e){return JSON.stringify(z.encode(e),(t,n)=>n instanceof T?n.toDict():n)}}let B,U=0;function _e(o){l().sfDebug&&console.log("Initializing Exception Interceptor...");try{const r=(function(){if(B!==void 0)return B;const a=process.env||{},c=Ae(a.SF_IS_LOCAL);if(c!==void 0)return B=c;const d=(a.SF_ENV||a.NODE_ENV||"").toLowerCase();if(["local","dev","development"].includes(d))return B=!0;if(["KUBERNETES_SERVICE_HOST","AWS_EXECUTION_ENV","ECS_CONTAINER_METADATA_URI","ECS_CONTAINER_METADATA_URI_V4","GAE_ENV","K_SERVICE","GOOGLE_CLOUD_PROJECT","WEBSITE_INSTANCE_ID","VERCEL","NETLIFY","DYNO","RENDER","FLY_APP_NAME","RAILWAY_STATIC_URL","CF_PAGES","CLOUDFLARE"].some(h=>!!a[h]))return B=!1;const I=(N.hostname?.()||a.HOSTNAME||"").toLowerCase();return I==="localhost"||I.endsWith(".local")||I.includes("local")?B=!0:B=!1})();o?.setSupplementalFields?.({isFromLocalService:r}),(async function(a){if(he)return;he=!0;const c=process.env||{};if(Ae(c.SF_IS_LOCAL)===void 0)try{await(async function(d){const I=j("http://169.254.169.254/latest/meta-data/",{},d),h=j("http://metadata.google.internal/computeMetadata/v1/instance/",{"Metadata-Flavor":"Google"},d),p=j("http://169.254.169.254/metadata/instance?api-version=2021-02-01",{Metadata:"true"},d);return(await Promise.allSettled([I,h,p])).some(u=>u.status==="fulfilled"&&(u.value==="ok"||u.value==="http_error"))})(150)&&B&&(B=!1,a?.setSupplementalFields?.({isFromLocalService:!1}))}catch{}})(o).catch(()=>{})}catch{}const e=new He.Worker(new URL("data:application/javascript;base64,aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gImluc3BlY3Rvci9wcm9taXNlcyI7CmltcG9ydCB7IHBhcmVudFBvcnQsIHdvcmtlckRhdGEgfSBmcm9tICJ3b3JrZXJfdGhyZWFkcyI7CgpnbG9iYWwuc2ZEZWJ1ZyA9IHVuZGVmaW5lZDsKZ2xvYmFsLnN0YWNrRGVwdGhMb2NhbHMgPSB1bmRlZmluZWQ7Cmdsb2JhbC5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT24gPSB1bmRlZmluZWQ7CgovKioKICogUHJvY2Vzc2VzIGNhbGwgZnJhbWVzIGZyb20gYW4gZXhjZXB0aW9uIGFuZCBwb3N0cyB0aGVtIHZpYSB0aGUgV29ya2Vy4oCZcyBwYXJlbnRQb3J0LgogKgogKiBAcGFyYW0gc2Vzc2lvbiAtIFRoZSBEZXZUb29scyBzZXNzaW9uIG9yIHNpbWlsYXIgb2JqZWN0IHlvdSB1c2UgdG8gcXVlcnkgZm9yIHNjcmlwdCBzb3VyY2VzLgogKiBAcGFyYW0gY2FsbEZyYW1lcyAtIEFuIGFycmF5IG9mIGNhbGwgZnJhbWUgb2JqZWN0cy4KICogQHBhcmFtIGRlc2NyaXB0aW9uTGluZXMgLSBBbiBhcnJheSBvZiBsaW5lcyBmcm9tIHRoZSBlcnJvcuKAmXMgZGVzY3JpcHRpb24sIGVhY2ggdHlwaWNhbGx5IGJlZ2lubmluZyB3aXRoICJhdCAiLgogKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0KICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ2FsbEZyYW1lcyhzZXNzaW9uLCBjYWxsRnJhbWVzLCBkZXNjcmlwdGlvbkxpbmVzKSB7CiAgLyoqCiAgICogTGltaXQgdGhlIGNhbGwgZnJhbWVzIHRvIHRoZSBtYXhpbXVtIGRlcHRoIHNwZWNpZmllZCBieSBnbG9iYWwuc3RhY2tEZXB0aExvY2Fscy4KICAgKiBUaGlzIGFzc3VtZXMgdGhhdCBnbG9iYWwuc3RhY2tEZXB0aExvY2FscyBpcyBkZWZpbmVkIGFzIGEgbnVtYmVyLgogICAqLwogIGNvbnN0IGxpbWl0ZWRDYWxsRnJhbWVzID0gY2FsbEZyYW1lcy5zbGljZSgwLCBnbG9iYWwuc3RhY2tEZXB0aExvY2Fscyk7CgogIGNvbnN0IGZyYW1lcyA9IGF3YWl0IFByb21pc2UuYWxsKAogICAgbGltaXRlZENhbGxGcmFtZXMubWFwKGFzeW5jIChmcmFtZSwgaW5kZXgpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB7IGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIHVybCwgc2NvcGVDaGFpbiB9ID0gZnJhbWU7CiAgICAgICAgLy8gRmluZCB0aGUgbG9jYWwgc2NvcGUsIGlmIGFueQogICAgICAgIGNvbnN0IGxvY2FsU2NvcGUgPSBzY29wZUNoYWluLmZpbmQoKHNjb3BlKSA9PiBzY29wZS50eXBlID09PSAibG9jYWwiKTsKCiAgICAgICAgbGV0IGNvZGUgPSAiPG5vdCBjYXB0dXJlZD4iOwogICAgICAgIC8vIFVzZSBlaXRoZXIgdGhlIFVSTCBvciB0aGUgZGVzY3JpcHRpb24gbGluZSBmb3IgZmlsZSByZWZlcmVuY2UKICAgICAgICBsZXQgZmlsZSA9ICIiOwogICAgICAgIGlmICh1cmwgJiYgdXJsLnRyaW0oKSAhPT0gIiIpIHsKICAgICAgICAgIGZpbGUgPSB1cmw7CiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdGlvbkxpbmVzW2luZGV4XSkgewogICAgICAgICAgZmlsZSA9IGRlc2NyaXB0aW9uTGluZXNbaW5kZXhdLnRyaW0oKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmlsZSA9ICI8dW5rbm93bj4iOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uIGFuZCBzY3JpcHRJZCwgZmV0Y2ggdGhlIGNvZGUgbGluZQogICAgICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5zY3JpcHRJZCkgewogICAgICAgICAgY29uc3Qgc2NyaXB0SWQgPSBsb2NhdGlvbi5zY3JpcHRJZDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHsgc2NyaXB0U291cmNlIH0gPSBhd2FpdCBzZXNzaW9uLnBvc3QoCiAgICAgICAgICAgICAgIkRlYnVnZ2VyLmdldFNjcmlwdFNvdXJjZSIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2NyaXB0SWQsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgY29uc3Qgc291cmNlTGluZXMgPSBzY3JpcHRTb3VyY2Uuc3BsaXQoIlxuIik7CiAgICAgICAgICAgIGNvZGUgPSBzb3VyY2VMaW5lc1tsb2NhdGlvbi5saW5lTnVtYmVyXSB8fCAiPG5vdCBjYXB0dXJlZD4iOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIEZhaWxlZCB0byBmZXRjaCBzY3JpcHQgc291cmNlOiIsIGVycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEZldGNoIGxvY2FsIHZhcmlhYmxlcyBpZiB0aGVyZSdzIGFuIG9iamVjdElkCiAgICAgICAgY29uc3QgbG9jYWxzID0gbG9jYWxTY29wZT8ub2JqZWN0Py5vYmplY3RJZAogICAgICAgICAgPyBhd2FpdCBmZXRjaExvY2FsVmFyaWFibGVzKHNlc3Npb24sIGxvY2FsU2NvcGUub2JqZWN0Lm9iamVjdElkKQogICAgICAgICAgOiB7fTsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IiwKICAgICAgICAgIGxvY2FscywKICAgICAgICAgIGZpbGUsCiAgICAgICAgICBsaW5lOiBsb2NhdGlvbj8ubGluZU51bWJlciB8fCAwLAogICAgICAgICAgY29kZSwKICAgICAgICB9OwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgICAgICAgY29uc29sZS5lcnJvcigiW1dvcmtlcl0gRXJyb3IgcHJvY2Vzc2luZyBjYWxsIGZyYW1lOiIsIGVycm9yKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGZ1bmN0aW9uOiAiPGVycm9yPiIsCiAgICAgICAgICBsb2NhbHM6IHt9LAogICAgICAgICAgZmlsZTogIjx1bmtub3duPiIsCiAgICAgICAgICBsaW5lOiAwLAogICAgICAgICAgY29kZTogIjxub3QgY2FwdHVyZWQ+IiwKICAgICAgICB9OwogICAgICB9CiAgICB9KSwKICApOwogIC8vIFBvc3QgZXhjZXB0aW9uIGRhdGEKICBwYXJlbnRQb3J0Py5wb3N0TWVzc2FnZSh7IHR5cGU6ICJleGNlcHRpb24iLCBmcmFtZXMgfSk7Cn0KCi8qKgogKiBIYW5kbGVzIHRoZSAicGF1c2VkIiBzdGF0ZSBvZiB0aGUgZGVidWdnZXIgYW5kIHByb2Nlc3NlcyBleGNlcHRpb25zIG9yIHByb21pc2UgcmVqZWN0aW9ucy4KICogQHBhcmFtIHtTZXNzaW9ufSBzZXNzaW9uIC0gVGhlIGRlYnVnZ2luZyBzZXNzaW9uIGluc3RhbmNlLgogKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBmcm9tIHRoZSAicGF1c2VkIiBldmVudC4KICovCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBhdXNlZChzZXNzaW9uLCBwYXJhbXMpIHsKICBjb25zdCB7IHJlYXNvbiwgZGF0YSwgY2FsbEZyYW1lcyB9ID0gcGFyYW1zOwoKICBpZiAocmVhc29uICE9PSAiZXhjZXB0aW9uIiAmJiByZWFzb24gIT09ICJwcm9taXNlUmVqZWN0aW9uIikgewogICAgcmV0dXJuOwogIH0KCiAgLy8gRGVmaW5lIHJlZ2V4IHBhdHRlcm5zIHRvIGlkZW50aWZ5IG5vbi1hcHBsaWNhdGlvbiBzb3VyY2UgZXJyb3JzLgogIGNvbnN0IG5vbkFwcFBhdHRlcm5zID0gWwogICAgL25vZGU6aW50ZXJuYWwvLAogICAgL2ludGVybmFsXC8vLAogICAgL25vZGVfbW9kdWxlcy8sCiAgICAvbm9kZTpmcy8sCiAgXTsKCiAgbGV0IGZpcnN0RnJhbWVMaW5lID0gIiI7CiAgbGV0IGRlc2NyaXB0aW9uTGluZXMgPSBbXTsKCiAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEuZGVzY3JpcHRpb24gPT09ICJzdHJpbmciKSB7CiAgICAvLyBTcGxpdCB0aGUgZGVzY3JpcHRpb24gaW50byBsaW5lcyBhbmQgZmlsdGVyIHRvIGtlZXAgb25seSBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggImF0ICIKICAgIGRlc2NyaXB0aW9uTGluZXMgPSBkYXRhLmRlc2NyaXB0aW9uCiAgICAgIC5zcGxpdCgiXG4iKQogICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCJhdCAiKSk7CgogICAgLy8gVXNlIHRoZSBmaXJzdCBjYWxsIGZyYW1lIGxpbmUgZnJvbSB0aGUgZGVzY3JpcHRpb24gZm9yIGZpbHRlcmluZy4KICAgIGZpcnN0RnJhbWVMaW5lID0gZGVzY3JpcHRpb25MaW5lc1swXSB8fCAiIjsKICAgIGlmICghZmlyc3RGcmFtZUxpbmUpIHsKICAgICAgLy8gSWYsIGZvciBzb21lIHJlYXNvbiwgdGhlcmUncyBubyBmcmFtZSwgYmFpbCBvdXQKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSAibm9uLWFwcCIgZXJyb3IKICAgIGNvbnN0IGVycm9yRnJvbU5vbkFwcCA9IG5vbkFwcFBhdHRlcm5zLnNvbWUoKHBhdHRlcm4pID0+CiAgICAgIHBhdHRlcm4udGVzdChmaXJzdEZyYW1lTGluZS50cmltKCkpLAogICAgKTsKCiAgICAvLyBDb252ZXJ0IGBnbG9iYWwubm9kZU1vZHVsZXNUb0NvbGxlY3RMb2NhbFZhcmlhYmxlc09uYCB0byBhbiBhcnJheSBmb3Igc2FmZXR5CiAgICBjb25zdCBub2RlTW9kdWxlc0xpc3QgPSBBcnJheS5pc0FycmF5KAogICAgICBnbG9iYWwubm9kZU1vZHVsZXNUb0NvbGxlY3RMb2NhbFZhcmlhYmxlc09uLAogICAgKQogICAgICA/IGdsb2JhbC5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT24KICAgICAgOiBbXTsKICAgIGlmIChlcnJvckZyb21Ob25BcHApIHsKICAgICAgLy8gSWYgdGhlIGVycm9yIGlzIGZyb20gYSBub24tYXBwIHNvdXJjZSwgd2UgaGF2ZSBhIGZldyBzY2VuYXJpb3M6CiAgICAgIGlmIChub2RlTW9kdWxlc0xpc3QuaW5jbHVkZXMoIl9fYWxsX18iKSkgewogICAgICAgIC8vIElmIHRoZSBsaXN0IGluY2x1ZGVzIF9fYWxsX18sIGNhcHR1cmUgbG9jYWwgdmFyaWFibGVzIGZyb20gKmFsbCogbm9kZV9tb2R1bGVzCiAgICAgICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygKICAgICAgICAgICAgIltXb3JrZXJdIEVycm9yIGlzIGZyb20gbm9uLWFwcCBzb3VyY2UsIGJ1dCBjYXB0dXJpbmcgZHVlIHRvIF9fYWxsX18gcnVsZS4iLAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGludWUgKGRvIE5PVCByZXR1cm4pLi4uCiAgICAgIH0gZWxzZSBpZiAobm9kZU1vZHVsZXNMaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgZnJhbWUgcmVmZXJlbmNlcyBvbmUgb2YgdGhlIG1vZHVsZXMgd2UgYWxsb3cgY2FwdHVyaW5nIGZyb20KICAgICAgICBjb25zdCBpc0Zyb21BbGxvd2VkTm9kZU1vZHVsZSA9IG5vZGVNb2R1bGVzTGlzdC5zb21lKChtb2R1bGVOYW1lKSA9PgogICAgICAgICAgZmlyc3RGcmFtZUxpbmUuaW5jbHVkZXMoYCR7bW9kdWxlTmFtZX1gKSwKICAgICAgICApOwoKICAgICAgICBpZiAoIWlzRnJvbUFsbG93ZWROb2RlTW9kdWxlKSB7CiAgICAgICAgICAvLyBOb3QgZnJvbSBhbiBhbGxvd2VkIG5vZGUgbW9kdWxlID0+IHJldHVybiBlYXJseQogICAgICAgICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKAogICAgICAgICAgICAgICJbV29ya2VyXSBFcnJvciBhcHBlYXJzIHRvIGJlIHRyaWdnZXJlZCBmcm9tIG5vbi1hcHBsaWNhdGlvbiBzb3VyY2VzOyBpZ25vcmluZy4iLAogICAgICAgICAgICApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBPdGhlcndpc2UsIGl0J3MgZnJvbSBhbiBhbGxvd2VkIG5vZGUgbW9kdWxlLCBzbyBjb250aW51ZQogICAgICB9IGVsc2UgewogICAgICAgIC8vIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvciBhbmQgaWdub3JlIG5vbi1hcHBsaWNhdGlvbiBlcnJvcnMKICAgICAgICBpZiAoZ2xvYmFsLnNmRGVidWcpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKAogICAgICAgICAgICAiW1dvcmtlcl0gRXJyb3IgYXBwZWFycyB0byBiZSB0cmlnZ2VyZWQgZnJvbSBub24tYXBwbGljYXRpb24gc291cmNlczsgaWdub3JpbmcuIiwKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIC8vIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQsIHRoZSBlcnJvciBpcyBlaXRoZXIgZnJvbSBhcHAgY29kZSwgb3IgZnJvbSBhIG5vZGUgbW9kdWxlIGFsbG93ZWQgYnkgdGhlIGxpc3QKICAgIC8vID0+IFByb2NlZWQgd2l0aCBjYXB0dXJpbmcgbG9jYWwgdmFyaWFibGVzLCBldGMuCiAgICBhd2FpdCBwcm9jZXNzQ2FsbEZyYW1lcyhzZXNzaW9uLCBjYWxsRnJhbWVzLCBkZXNjcmlwdGlvbkxpbmVzKTsKICB9IGVsc2UgewogICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YS5kZXNjcmlwdGlvbiBvciBpdCdzIG5vdCBhIHN0cmluZywganVzdCByZXR1cm4KICAgIHJldHVybjsKICB9Cn0KCi8qKgogKiBJbml0aWFsaXplcyB0aGUgZGVidWdnZXIgYW5kIHNldHMgdXAgZXZlbnQgbGlzdGVuZXJzIGZvciBleGNlcHRpb25zIGFuZCBwcm9taXNlIHJlamVjdGlvbnMuCiAqLwphc3luYyBmdW5jdGlvbiBzdGFydERlYnVnZ2VyKCkgewogIHBhcmVudFBvcnQ/LnBvc3RNZXNzYWdlKHsgdHlwZTogIm1lc3NhZ2UiLCByZWFkeVRvR2V0UGFyYW1ldGVyczogdHJ1ZSB9KTsKCiAgbGV0IHJlc29sdmVNZXNzYWdlUHJvbWlzZTsKICBjb25zdCBtZXNzYWdlUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICByZXNvbHZlTWVzc2FnZVByb21pc2UgPSByZXNvbHZlOwogIH0pOwogIGxldCBpc1BhdXNlZCA9IGZhbHNlOwoKICBwYXJlbnRQb3J0Py5vbigibWVzc2FnZSIsIChtZXNzYWdlKSA9PiB7CiAgICB0cnkgewogICAgICBpZiAobWVzc2FnZT8udHlwZSA9PT0gInByb2Nlc3NFeGNlcHRpb24iKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoCiAgICAgICAgbWVzc2FnZT8uc2ZEZWJ1ZyAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgbWVzc2FnZT8uc3RhY2tEZXB0aExvY2FscyAhPT0gdW5kZWZpbmVkCiAgICAgICkgewogICAgICAgIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgICAgICAgY29uc29sZS5sb2coIlVwZGF0aW5nIGdsb2JhbCBkZWJ1ZyB2YXJpYWJsZXMuLi4iKTsKICAgICAgICB9CgogICAgICAgIGdsb2JhbC5zZkRlYnVnID0gbWVzc2FnZS5zZkRlYnVnOwogICAgICAgIGdsb2JhbC5zdGFja0RlcHRoTG9jYWxzID0gbWVzc2FnZS5zdGFja0RlcHRoTG9jYWxzOwogICAgICAgIGdsb2JhbC5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT24gPQogICAgICAgICAgbWVzc2FnZS5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT247CgogICAgICAgIHJlc29sdmVNZXNzYWdlUHJvbWlzZSgpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpZiAoZ2xvYmFsLnNmRGVidWcpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCLinYwgRXJyb3IgaW4gbWVzc2FnZSBoYW5kbGluZzoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgYXdhaXQgbWVzc2FnZVByb21pc2U7CgogIHRyeSB7CiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTsKICAgIHNlc3Npb24uY29ubmVjdFRvTWFpblRocmVhZCgpOwoKICAgIHNlc3Npb24ub24oIkRlYnVnZ2VyLnJlc3VtZWQiLCAoKSA9PiB7CiAgICAgIGlzUGF1c2VkID0gZmFsc2U7CiAgICB9KTsKCiAgICBzZXNzaW9uLm9uKCJEZWJ1Z2dlci5wYXVzZWQiLCBhc3luYyAoZXZlbnQpID0+IHsKICAgICAgaXNQYXVzZWQgPSB0cnVlOwogICAgICBoYW5kbGVQYXVzZWQoc2Vzc2lvbiwgZXZlbnQucGFyYW1zKS50aGVuKAogICAgICAgIGFzeW5jICgpID0+IHsKICAgICAgICAgIC8vIEFmdGVyIHRoZSBwYXVzZSB3b3JrIGlzIGNvbXBsZXRlLCByZXN1bWUgZXhlY3V0aW9uIQogICAgICAgICAgaWYgKGlzUGF1c2VkKSB7CiAgICAgICAgICAgIGF3YWl0IHNlc3Npb24ucG9zdCgiRGVidWdnZXIucmVzdW1lIik7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBhc3luYyAoXykgPT4gewogICAgICAgICAgaWYgKGlzUGF1c2VkKSB7CiAgICAgICAgICAgIGF3YWl0IHNlc3Npb24ucG9zdCgiRGVidWdnZXIucmVzdW1lIik7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKTsKICAgIH0pOwoKICAgIGF3YWl0IHNlc3Npb24ucG9zdCgiRGVidWdnZXIuZW5hYmxlIik7CgogICAgY29uc3QgY2FwdHVyZUFsbCA9IHdvcmtlckRhdGEuY2FwdHVyZUFsbEV4Y2VwdGlvbnMgIT09IGZhbHNlOwogICAgYXdhaXQgc2Vzc2lvbi5wb3N0KCJEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyIsIHsKICAgICAgc3RhdGU6IGNhcHR1cmVBbGwgPyAiYWxsIiA6ICJ1bmNhdWdodCIsCiAgICB9KTsKICB9IGNhdGNoIChlcnJvcikgewogICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIGVycm9yICIsIGVycm9yKTsKICAgIH0KICB9CgogIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgY29uc29sZS5sb2coIltXb3JrZXJdIERlYnVnZ2VyIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LiIpOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gdW5yb2xsT2JqZWN0KHNlc3Npb24sIG9iamVjdElkLCBuYW1lLCB2YXJzKSB7CiAgY29uc3QgcHJvcGVydGllcyA9IGF3YWl0IHNlc3Npb24ucG9zdCgiUnVudGltZS5nZXRQcm9wZXJ0aWVzIiwgewogICAgb2JqZWN0SWQsCiAgICBvd25Qcm9wZXJ0aWVzOiB0cnVlLAogIH0pOwoKICB2YXJzW25hbWVdID0gcHJvcGVydGllcy5yZXN1bHQKICAgIC5tYXAoKHYpID0+IFt2Lm5hbWUsIHYudmFsdWU/LnZhbHVlXSkKICAgIC5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsXSkgPT4gewogICAgICBvYmpba2V5XSA9IHZhbDsKICAgICAgcmV0dXJuIG9iajsKICAgIH0sIHt9KTsKfQoKYXN5bmMgZnVuY3Rpb24gdW5yb2xsQXJyYXkoc2Vzc2lvbiwgb2JqZWN0SWQsIG5hbWUsIHZhcnMpIHsKICBjb25zdCBwcm9wZXJ0aWVzID0gYXdhaXQgc2Vzc2lvbi5wb3N0KCJSdW50aW1lLmdldFByb3BlcnRpZXMiLCB7CiAgICBvYmplY3RJZDogb2JqZWN0SWQsCiAgICBvd25Qcm9wZXJ0aWVzOiB0cnVlLAogIH0pOwogIHZhcnNbbmFtZV0gPSBwcm9wZXJ0aWVzLnJlc3VsdAogICAgLmZpbHRlcigodikgPT4gdi5uYW1lICE9PSAibGVuZ3RoIiAmJiAhaXNOYU4ocGFyc2VJbnQodi5uYW1lLCAxMCkpKQogICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEubmFtZSwgMTApIC0gcGFyc2VJbnQoYi5uYW1lLCAxMCkpCiAgICAubWFwKCh2KSA9PiB2LnZhbHVlPy52YWx1ZSk7Cn0KCmZ1bmN0aW9uIHVucm9sbE90aGVyKHByb3AsIHZhcnMpIHsKICBpZiAoIXByb3AudmFsdWUpIHsKICAgIHJldHVybjsKICB9CgogIGlmICgidmFsdWUiIGluIHByb3AudmFsdWUpIHsKICAgIGlmIChwcm9wLnZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcC52YWx1ZS52YWx1ZSA9PT0gbnVsbCkgewogICAgICB2YXJzW3Byb3AubmFtZV0gPSBgPCR7cHJvcC52YWx1ZS52YWx1ZX0+YDsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhcnNbcHJvcC5uYW1lXSA9IHByb3AudmFsdWUudmFsdWU7CiAgICByZXR1cm47CiAgfQoKICBpZiAoImRlc2NyaXB0aW9uIiBpbiBwcm9wLnZhbHVlICYmIHByb3AudmFsdWUudHlwZSAhPT0gImZ1bmN0aW9uIikgewogICAgdmFyc1twcm9wLm5hbWVdID0gYDwke3Byb3AudmFsdWUuZGVzY3JpcHRpb259PmA7CiAgICByZXR1cm47CiAgfQoKICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAidW5kZWZpbmVkIikgewogICAgdmFyc1twcm9wLm5hbWVdID0gIjx1bmRlZmluZWQ+IjsKICAgIHJldHVybjsKICB9Cn0KCi8qKgogKiBGZXRjaGVzIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgSUQuCiAqIEBwYXJhbSB7U2Vzc2lvbn0gc2Vzc2lvbiAtIFRoZSBkZWJ1Z2dpbmcgc2Vzc2lvbiBpbnN0YW5jZS4KICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdElkIC0gVGhlIG9iamVjdCBJRCByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHNjb3BlLgogKiBAcmV0dXJucyB7b2JqZWN0fSBBIGtleS12YWx1ZSBtYXAgb2YgbG9jYWwgdmFyaWFibGUgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcy4KICovCmFzeW5jIGZ1bmN0aW9uIGZldGNoTG9jYWxWYXJpYWJsZXMoc2Vzc2lvbiwgb2JqZWN0SWQpIHsKICBpZiAoIW9iamVjdElkKSByZXR1cm4ge307CgogIHRyeSB7CiAgICBjb25zdCB7IHJlc3VsdCB9ID0gYXdhaXQgc2Vzc2lvbi5wb3N0KCJSdW50aW1lLmdldFByb3BlcnRpZXMiLCB7CiAgICAgIG9iamVjdElkLAogICAgICBvd25Qcm9wZXJ0aWVzOiB0cnVlLAogICAgfSk7CgogICAgY29uc3QgcHJvcGVydGllcyA9IHJlc3VsdDsKICAgIGlmIChwcm9wZXJ0aWVzKSB7CiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHt9OwogICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykgewogICAgICAgIGlmIChwcm9wPy52YWx1ZT8ub2JqZWN0SWQgJiYgcHJvcD8udmFsdWUuY2xhc3NOYW1lID09PSAiQXJyYXkiKSB7CiAgICAgICAgICBjb25zdCBpZCA9IHByb3AudmFsdWUub2JqZWN0SWQ7CiAgICAgICAgICBhd2FpdCB1bnJvbGxBcnJheShzZXNzaW9uLCBpZCwgcHJvcC5uYW1lLCB2YXJpYWJsZXMpOwogICAgICAgIH0gZWxzZSBpZiAoCiAgICAgICAgICBwcm9wPy52YWx1ZT8ub2JqZWN0SWQgJiYKICAgICAgICAgIHByb3A/LnZhbHVlPy5jbGFzc05hbWUgPT09ICJPYmplY3QiCiAgICAgICAgKSB7CiAgICAgICAgICBjb25zdCBpZCA9IHByb3AudmFsdWUub2JqZWN0SWQ7CiAgICAgICAgICBhd2FpdCB1bnJvbGxPYmplY3Qoc2Vzc2lvbiwgaWQsIHByb3AubmFtZSwgdmFyaWFibGVzKTsKICAgICAgICB9IGVsc2UgaWYgKHByb3A/LnZhbHVlKSB7CiAgICAgICAgICB1bnJvbGxPdGhlcihwcm9wLCB2YXJpYWJsZXMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdmFyaWFibGVzOwogICAgfQogIH0gY2F0Y2ggKGVycikgewogICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIEZhaWxlZCB0byBmZXRjaCBsb2NhbCB2YXJpYWJsZXM6IiwgZXJyKTsKICAgIH0KICAgIHJldHVybiB7fTsKICB9Cn0KCnN0YXJ0RGVidWdnZXIoKS5jYXRjaCgoZXJyb3IpID0+IHsKICBpZiAoZ2xvYmFsLnNmRGVidWcpIHsKICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIEZhaWxlZCB0byBzdGFydCBkZWJ1Z2dlcjoiLCBlcnJvcik7CiAgfQp9KTsKCi8vIEtlZXAgdGhlIHdvcmtlciBhbGl2ZQpzZXRJbnRlcnZhbCgoKSA9PiB7fSwgMTAwMDApOwo="),{workerData:{captureAllExceptions:!0}});let t=null;const n=new WeakMap;e.on("message",r=>{if(typeof r=="string"&&l().sfDebug&&console.log(`[Worker] ${r}`),r.readyToGetParameters&&e.postMessage({sfDebug:l().sfDebug,stackDepthLocals:l().stackDepthLocals,nodeModulesToCollectLocalVariablesOn:l().nodeModulesToCollectLocalVariablesOn}),r.type==="exception"){const{frames:a}=r,c=t;if(!c)return;const d=n.get(c),I=(function(p){return p?p.split(`
|
|
50
|
-
`).slice(1).map(u=>{const
|
|
51
|
-
`)[1]?.trim()}`;if(!s.has(c)){s.add(c),
|
|
52
|
-
`).slice(
|
|
53
|
-
`),name:I,file:
|
|
49
|
+
`}}const G={};class F{constructor({file:e,line:n,function:i,code:t,locals:s={},offender:l=!1,column:a}){A(this,"file");A(this,"line");A(this,"function");A(this,"code");A(this,"locals");A(this,"offender");A(this,"column");this.file=e,this.line=n,this.function=i,this.code=t,this.locals=s,this.offender=l,this.column=a}toDict(){const e={file:this.file,line:this.line,function:this.function,code:this.code,locals:Object.fromEntries(Object.entries(this.locals).map(([n,i])=>[n,String(i)]))};return this.offender&&(e.offender=this.offender),this.column!==void 0&&(e.column=this.column),e}toJson(){return JSON.stringify(this.toDict())}}class R{static encode(e){return e instanceof F?e.toDict():Array.isArray(e)?e.map(n=>R.encode(n)):typeof e=="object"&&e!==null?JSON.stringify(e):e}static stringify(e){return JSON.stringify(R.encode(e),(n,i)=>i instanceof F?i.toDict():i)}}let B,W=0;function fe(o){r.getConfig().sfDebug&&console.log("Initializing Exception Interceptor...");try{const a=(function(){if(B!==void 0)return B;const g=process.env||{},c=Q(g.SF_IS_LOCAL);if(c!==void 0)return B=c;const d=(g.SF_ENV||g.NODE_ENV||"").toLowerCase();if(["local","dev","development"].includes(d))return B=!0;if(["KUBERNETES_SERVICE_HOST","AWS_EXECUTION_ENV","ECS_CONTAINER_METADATA_URI","ECS_CONTAINER_METADATA_URI_V4","GAE_ENV","K_SERVICE","GOOGLE_CLOUD_PROJECT","WEBSITE_INSTANCE_ID","VERCEL","NETLIFY","DYNO","RENDER","FLY_APP_NAME","RAILWAY_STATIC_URL","CF_PAGES","CLOUDFLARE"].some(p=>!!g[p]))return B=!1;const I=(G.hostname?.()||g.HOSTNAME||"").toLowerCase();return I==="localhost"||I.endsWith(".local")||I.includes("local")?B=!0:B=!1})();o?.setSupplementalFields?.({isFromLocalService:a}),(async function(g){if(M)return;M=!0;const c=process.env||{};if(Q(c.SF_IS_LOCAL)===void 0)try{await(async function(d){const I=U("http://169.254.169.254/latest/meta-data/",{},d),p=U("http://metadata.google.internal/computeMetadata/v1/instance/",{"Metadata-Flavor":"Google"},d),C=U("http://169.254.169.254/metadata/instance?api-version=2021-02-01",{Metadata:"true"},d);return(await Promise.allSettled([I,p,C])).some(u=>u.status==="fulfilled"&&(u.value==="ok"||u.value==="http_error"))})(150)&&B&&(B=!1,g?.setSupplementalFields?.({isFromLocalService:!1}))}catch{}})(o).catch(()=>{})}catch{}const e=new N.Worker(new URL("data:application/javascript;base64,aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gImluc3BlY3Rvci9wcm9taXNlcyI7CmltcG9ydCB7IHBhcmVudFBvcnQsIHdvcmtlckRhdGEgfSBmcm9tICJ3b3JrZXJfdGhyZWFkcyI7CgpnbG9iYWwuc2ZEZWJ1ZyA9IHVuZGVmaW5lZDsKZ2xvYmFsLnN0YWNrRGVwdGhMb2NhbHMgPSB1bmRlZmluZWQ7Cmdsb2JhbC5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT24gPSB1bmRlZmluZWQ7CgovKioKICogUHJvY2Vzc2VzIGNhbGwgZnJhbWVzIGZyb20gYW4gZXhjZXB0aW9uIGFuZCBwb3N0cyB0aGVtIHZpYSB0aGUgV29ya2Vy4oCZcyBwYXJlbnRQb3J0LgogKgogKiBAcGFyYW0gc2Vzc2lvbiAtIFRoZSBEZXZUb29scyBzZXNzaW9uIG9yIHNpbWlsYXIgb2JqZWN0IHlvdSB1c2UgdG8gcXVlcnkgZm9yIHNjcmlwdCBzb3VyY2VzLgogKiBAcGFyYW0gY2FsbEZyYW1lcyAtIEFuIGFycmF5IG9mIGNhbGwgZnJhbWUgb2JqZWN0cy4KICogQHBhcmFtIGRlc2NyaXB0aW9uTGluZXMgLSBBbiBhcnJheSBvZiBsaW5lcyBmcm9tIHRoZSBlcnJvcuKAmXMgZGVzY3JpcHRpb24sIGVhY2ggdHlwaWNhbGx5IGJlZ2lubmluZyB3aXRoICJhdCAiLgogKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0KICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ2FsbEZyYW1lcyhzZXNzaW9uLCBjYWxsRnJhbWVzLCBkZXNjcmlwdGlvbkxpbmVzKSB7CiAgLyoqCiAgICogTGltaXQgdGhlIGNhbGwgZnJhbWVzIHRvIHRoZSBtYXhpbXVtIGRlcHRoIHNwZWNpZmllZCBieSBnbG9iYWwuc3RhY2tEZXB0aExvY2Fscy4KICAgKiBUaGlzIGFzc3VtZXMgdGhhdCBnbG9iYWwuc3RhY2tEZXB0aExvY2FscyBpcyBkZWZpbmVkIGFzIGEgbnVtYmVyLgogICAqLwogIGNvbnN0IGxpbWl0ZWRDYWxsRnJhbWVzID0gY2FsbEZyYW1lcy5zbGljZSgwLCBnbG9iYWwuc3RhY2tEZXB0aExvY2Fscyk7CgogIGNvbnN0IGZyYW1lcyA9IGF3YWl0IFByb21pc2UuYWxsKAogICAgbGltaXRlZENhbGxGcmFtZXMubWFwKGFzeW5jIChmcmFtZSwgaW5kZXgpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB7IGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIHVybCwgc2NvcGVDaGFpbiB9ID0gZnJhbWU7CiAgICAgICAgLy8gRmluZCB0aGUgbG9jYWwgc2NvcGUsIGlmIGFueQogICAgICAgIGNvbnN0IGxvY2FsU2NvcGUgPSBzY29wZUNoYWluLmZpbmQoKHNjb3BlKSA9PiBzY29wZS50eXBlID09PSAibG9jYWwiKTsKCiAgICAgICAgbGV0IGNvZGUgPSAiPG5vdCBjYXB0dXJlZD4iOwogICAgICAgIC8vIFVzZSBlaXRoZXIgdGhlIFVSTCBvciB0aGUgZGVzY3JpcHRpb24gbGluZSBmb3IgZmlsZSByZWZlcmVuY2UKICAgICAgICBsZXQgZmlsZSA9ICIiOwogICAgICAgIGlmICh1cmwgJiYgdXJsLnRyaW0oKSAhPT0gIiIpIHsKICAgICAgICAgIGZpbGUgPSB1cmw7CiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdGlvbkxpbmVzW2luZGV4XSkgewogICAgICAgICAgZmlsZSA9IGRlc2NyaXB0aW9uTGluZXNbaW5kZXhdLnRyaW0oKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmlsZSA9ICI8dW5rbm93bj4iOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uIGFuZCBzY3JpcHRJZCwgZmV0Y2ggdGhlIGNvZGUgbGluZQogICAgICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5zY3JpcHRJZCkgewogICAgICAgICAgY29uc3Qgc2NyaXB0SWQgPSBsb2NhdGlvbi5zY3JpcHRJZDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHsgc2NyaXB0U291cmNlIH0gPSBhd2FpdCBzZXNzaW9uLnBvc3QoCiAgICAgICAgICAgICAgIkRlYnVnZ2VyLmdldFNjcmlwdFNvdXJjZSIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2NyaXB0SWQsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgY29uc3Qgc291cmNlTGluZXMgPSBzY3JpcHRTb3VyY2Uuc3BsaXQoIlxuIik7CiAgICAgICAgICAgIGNvZGUgPSBzb3VyY2VMaW5lc1tsb2NhdGlvbi5saW5lTnVtYmVyXSB8fCAiPG5vdCBjYXB0dXJlZD4iOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIEZhaWxlZCB0byBmZXRjaCBzY3JpcHQgc291cmNlOiIsIGVycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEZldGNoIGxvY2FsIHZhcmlhYmxlcyBpZiB0aGVyZSdzIGFuIG9iamVjdElkCiAgICAgICAgY29uc3QgbG9jYWxzID0gbG9jYWxTY29wZT8ub2JqZWN0Py5vYmplY3RJZAogICAgICAgICAgPyBhd2FpdCBmZXRjaExvY2FsVmFyaWFibGVzKHNlc3Npb24sIGxvY2FsU2NvcGUub2JqZWN0Lm9iamVjdElkKQogICAgICAgICAgOiB7fTsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IiwKICAgICAgICAgIGxvY2FscywKICAgICAgICAgIGZpbGUsCiAgICAgICAgICBsaW5lOiBsb2NhdGlvbj8ubGluZU51bWJlciB8fCAwLAogICAgICAgICAgY29kZSwKICAgICAgICB9OwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgICAgICAgY29uc29sZS5lcnJvcigiW1dvcmtlcl0gRXJyb3IgcHJvY2Vzc2luZyBjYWxsIGZyYW1lOiIsIGVycm9yKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGZ1bmN0aW9uOiAiPGVycm9yPiIsCiAgICAgICAgICBsb2NhbHM6IHt9LAogICAgICAgICAgZmlsZTogIjx1bmtub3duPiIsCiAgICAgICAgICBsaW5lOiAwLAogICAgICAgICAgY29kZTogIjxub3QgY2FwdHVyZWQ+IiwKICAgICAgICB9OwogICAgICB9CiAgICB9KSwKICApOwogIC8vIFBvc3QgZXhjZXB0aW9uIGRhdGEKICBwYXJlbnRQb3J0Py5wb3N0TWVzc2FnZSh7IHR5cGU6ICJleGNlcHRpb24iLCBmcmFtZXMgfSk7Cn0KCi8qKgogKiBIYW5kbGVzIHRoZSAicGF1c2VkIiBzdGF0ZSBvZiB0aGUgZGVidWdnZXIgYW5kIHByb2Nlc3NlcyBleGNlcHRpb25zIG9yIHByb21pc2UgcmVqZWN0aW9ucy4KICogQHBhcmFtIHtTZXNzaW9ufSBzZXNzaW9uIC0gVGhlIGRlYnVnZ2luZyBzZXNzaW9uIGluc3RhbmNlLgogKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBmcm9tIHRoZSAicGF1c2VkIiBldmVudC4KICovCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBhdXNlZChzZXNzaW9uLCBwYXJhbXMpIHsKICBjb25zdCB7IHJlYXNvbiwgZGF0YSwgY2FsbEZyYW1lcyB9ID0gcGFyYW1zOwoKICBpZiAocmVhc29uICE9PSAiZXhjZXB0aW9uIiAmJiByZWFzb24gIT09ICJwcm9taXNlUmVqZWN0aW9uIikgewogICAgcmV0dXJuOwogIH0KCiAgLy8gRGVmaW5lIHJlZ2V4IHBhdHRlcm5zIHRvIGlkZW50aWZ5IG5vbi1hcHBsaWNhdGlvbiBzb3VyY2UgZXJyb3JzLgogIGNvbnN0IG5vbkFwcFBhdHRlcm5zID0gWwogICAgL25vZGU6aW50ZXJuYWwvLAogICAgL2ludGVybmFsXC8vLAogICAgL25vZGVfbW9kdWxlcy8sCiAgICAvbm9kZTpmcy8sCiAgXTsKCiAgbGV0IGZpcnN0RnJhbWVMaW5lID0gIiI7CiAgbGV0IGRlc2NyaXB0aW9uTGluZXMgPSBbXTsKCiAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEuZGVzY3JpcHRpb24gPT09ICJzdHJpbmciKSB7CiAgICAvLyBTcGxpdCB0aGUgZGVzY3JpcHRpb24gaW50byBsaW5lcyBhbmQgZmlsdGVyIHRvIGtlZXAgb25seSBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggImF0ICIKICAgIGRlc2NyaXB0aW9uTGluZXMgPSBkYXRhLmRlc2NyaXB0aW9uCiAgICAgIC5zcGxpdCgiXG4iKQogICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCJhdCAiKSk7CgogICAgLy8gVXNlIHRoZSBmaXJzdCBjYWxsIGZyYW1lIGxpbmUgZnJvbSB0aGUgZGVzY3JpcHRpb24gZm9yIGZpbHRlcmluZy4KICAgIGZpcnN0RnJhbWVMaW5lID0gZGVzY3JpcHRpb25MaW5lc1swXSB8fCAiIjsKICAgIGlmICghZmlyc3RGcmFtZUxpbmUpIHsKICAgICAgLy8gSWYsIGZvciBzb21lIHJlYXNvbiwgdGhlcmUncyBubyBmcmFtZSwgYmFpbCBvdXQKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSAibm9uLWFwcCIgZXJyb3IKICAgIGNvbnN0IGVycm9yRnJvbU5vbkFwcCA9IG5vbkFwcFBhdHRlcm5zLnNvbWUoKHBhdHRlcm4pID0+CiAgICAgIHBhdHRlcm4udGVzdChmaXJzdEZyYW1lTGluZS50cmltKCkpLAogICAgKTsKCiAgICAvLyBDb252ZXJ0IGBnbG9iYWwubm9kZU1vZHVsZXNUb0NvbGxlY3RMb2NhbFZhcmlhYmxlc09uYCB0byBhbiBhcnJheSBmb3Igc2FmZXR5CiAgICBjb25zdCBub2RlTW9kdWxlc0xpc3QgPSBBcnJheS5pc0FycmF5KAogICAgICBnbG9iYWwubm9kZU1vZHVsZXNUb0NvbGxlY3RMb2NhbFZhcmlhYmxlc09uLAogICAgKQogICAgICA/IGdsb2JhbC5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT24KICAgICAgOiBbXTsKICAgIGlmIChlcnJvckZyb21Ob25BcHApIHsKICAgICAgLy8gSWYgdGhlIGVycm9yIGlzIGZyb20gYSBub24tYXBwIHNvdXJjZSwgd2UgaGF2ZSBhIGZldyBzY2VuYXJpb3M6CiAgICAgIGlmIChub2RlTW9kdWxlc0xpc3QuaW5jbHVkZXMoIl9fYWxsX18iKSkgewogICAgICAgIC8vIElmIHRoZSBsaXN0IGluY2x1ZGVzIF9fYWxsX18sIGNhcHR1cmUgbG9jYWwgdmFyaWFibGVzIGZyb20gKmFsbCogbm9kZV9tb2R1bGVzCiAgICAgICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygKICAgICAgICAgICAgIltXb3JrZXJdIEVycm9yIGlzIGZyb20gbm9uLWFwcCBzb3VyY2UsIGJ1dCBjYXB0dXJpbmcgZHVlIHRvIF9fYWxsX18gcnVsZS4iLAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGludWUgKGRvIE5PVCByZXR1cm4pLi4uCiAgICAgIH0gZWxzZSBpZiAobm9kZU1vZHVsZXNMaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgZnJhbWUgcmVmZXJlbmNlcyBvbmUgb2YgdGhlIG1vZHVsZXMgd2UgYWxsb3cgY2FwdHVyaW5nIGZyb20KICAgICAgICBjb25zdCBpc0Zyb21BbGxvd2VkTm9kZU1vZHVsZSA9IG5vZGVNb2R1bGVzTGlzdC5zb21lKChtb2R1bGVOYW1lKSA9PgogICAgICAgICAgZmlyc3RGcmFtZUxpbmUuaW5jbHVkZXMoYCR7bW9kdWxlTmFtZX1gKSwKICAgICAgICApOwoKICAgICAgICBpZiAoIWlzRnJvbUFsbG93ZWROb2RlTW9kdWxlKSB7CiAgICAgICAgICAvLyBOb3QgZnJvbSBhbiBhbGxvd2VkIG5vZGUgbW9kdWxlID0+IHJldHVybiBlYXJseQogICAgICAgICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKAogICAgICAgICAgICAgICJbV29ya2VyXSBFcnJvciBhcHBlYXJzIHRvIGJlIHRyaWdnZXJlZCBmcm9tIG5vbi1hcHBsaWNhdGlvbiBzb3VyY2VzOyBpZ25vcmluZy4iLAogICAgICAgICAgICApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBPdGhlcndpc2UsIGl0J3MgZnJvbSBhbiBhbGxvd2VkIG5vZGUgbW9kdWxlLCBzbyBjb250aW51ZQogICAgICB9IGVsc2UgewogICAgICAgIC8vIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvciBhbmQgaWdub3JlIG5vbi1hcHBsaWNhdGlvbiBlcnJvcnMKICAgICAgICBpZiAoZ2xvYmFsLnNmRGVidWcpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKAogICAgICAgICAgICAiW1dvcmtlcl0gRXJyb3IgYXBwZWFycyB0byBiZSB0cmlnZ2VyZWQgZnJvbSBub24tYXBwbGljYXRpb24gc291cmNlczsgaWdub3JpbmcuIiwKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIC8vIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQsIHRoZSBlcnJvciBpcyBlaXRoZXIgZnJvbSBhcHAgY29kZSwgb3IgZnJvbSBhIG5vZGUgbW9kdWxlIGFsbG93ZWQgYnkgdGhlIGxpc3QKICAgIC8vID0+IFByb2NlZWQgd2l0aCBjYXB0dXJpbmcgbG9jYWwgdmFyaWFibGVzLCBldGMuCiAgICBhd2FpdCBwcm9jZXNzQ2FsbEZyYW1lcyhzZXNzaW9uLCBjYWxsRnJhbWVzLCBkZXNjcmlwdGlvbkxpbmVzKTsKICB9IGVsc2UgewogICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YS5kZXNjcmlwdGlvbiBvciBpdCdzIG5vdCBhIHN0cmluZywganVzdCByZXR1cm4KICAgIHJldHVybjsKICB9Cn0KCi8qKgogKiBJbml0aWFsaXplcyB0aGUgZGVidWdnZXIgYW5kIHNldHMgdXAgZXZlbnQgbGlzdGVuZXJzIGZvciBleGNlcHRpb25zIGFuZCBwcm9taXNlIHJlamVjdGlvbnMuCiAqLwphc3luYyBmdW5jdGlvbiBzdGFydERlYnVnZ2VyKCkgewogIHBhcmVudFBvcnQ/LnBvc3RNZXNzYWdlKHsgdHlwZTogIm1lc3NhZ2UiLCByZWFkeVRvR2V0UGFyYW1ldGVyczogdHJ1ZSB9KTsKCiAgbGV0IHJlc29sdmVNZXNzYWdlUHJvbWlzZTsKICBjb25zdCBtZXNzYWdlUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICByZXNvbHZlTWVzc2FnZVByb21pc2UgPSByZXNvbHZlOwogIH0pOwogIGxldCBpc1BhdXNlZCA9IGZhbHNlOwoKICBwYXJlbnRQb3J0Py5vbigibWVzc2FnZSIsIChtZXNzYWdlKSA9PiB7CiAgICB0cnkgewogICAgICBpZiAobWVzc2FnZT8udHlwZSA9PT0gInByb2Nlc3NFeGNlcHRpb24iKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoCiAgICAgICAgbWVzc2FnZT8uc2ZEZWJ1ZyAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgbWVzc2FnZT8uc3RhY2tEZXB0aExvY2FscyAhPT0gdW5kZWZpbmVkCiAgICAgICkgewogICAgICAgIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgICAgICAgY29uc29sZS5sb2coIlVwZGF0aW5nIGdsb2JhbCBkZWJ1ZyB2YXJpYWJsZXMuLi4iKTsKICAgICAgICB9CgogICAgICAgIGdsb2JhbC5zZkRlYnVnID0gbWVzc2FnZS5zZkRlYnVnOwogICAgICAgIGdsb2JhbC5zdGFja0RlcHRoTG9jYWxzID0gbWVzc2FnZS5zdGFja0RlcHRoTG9jYWxzOwogICAgICAgIGdsb2JhbC5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT24gPQogICAgICAgICAgbWVzc2FnZS5ub2RlTW9kdWxlc1RvQ29sbGVjdExvY2FsVmFyaWFibGVzT247CgogICAgICAgIHJlc29sdmVNZXNzYWdlUHJvbWlzZSgpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpZiAoZ2xvYmFsLnNmRGVidWcpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCLinYwgRXJyb3IgaW4gbWVzc2FnZSBoYW5kbGluZzoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgYXdhaXQgbWVzc2FnZVByb21pc2U7CgogIHRyeSB7CiAgICBjb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb24oKTsKICAgIHNlc3Npb24uY29ubmVjdFRvTWFpblRocmVhZCgpOwoKICAgIHNlc3Npb24ub24oIkRlYnVnZ2VyLnJlc3VtZWQiLCAoKSA9PiB7CiAgICAgIGlzUGF1c2VkID0gZmFsc2U7CiAgICB9KTsKCiAgICBzZXNzaW9uLm9uKCJEZWJ1Z2dlci5wYXVzZWQiLCBhc3luYyAoZXZlbnQpID0+IHsKICAgICAgaXNQYXVzZWQgPSB0cnVlOwogICAgICBoYW5kbGVQYXVzZWQoc2Vzc2lvbiwgZXZlbnQucGFyYW1zKS50aGVuKAogICAgICAgIGFzeW5jICgpID0+IHsKICAgICAgICAgIC8vIEFmdGVyIHRoZSBwYXVzZSB3b3JrIGlzIGNvbXBsZXRlLCByZXN1bWUgZXhlY3V0aW9uIQogICAgICAgICAgaWYgKGlzUGF1c2VkKSB7CiAgICAgICAgICAgIGF3YWl0IHNlc3Npb24ucG9zdCgiRGVidWdnZXIucmVzdW1lIik7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBhc3luYyAoXykgPT4gewogICAgICAgICAgaWYgKGlzUGF1c2VkKSB7CiAgICAgICAgICAgIGF3YWl0IHNlc3Npb24ucG9zdCgiRGVidWdnZXIucmVzdW1lIik7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKTsKICAgIH0pOwoKICAgIGF3YWl0IHNlc3Npb24ucG9zdCgiRGVidWdnZXIuZW5hYmxlIik7CgogICAgY29uc3QgY2FwdHVyZUFsbCA9IHdvcmtlckRhdGEuY2FwdHVyZUFsbEV4Y2VwdGlvbnMgIT09IGZhbHNlOwogICAgYXdhaXQgc2Vzc2lvbi5wb3N0KCJEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyIsIHsKICAgICAgc3RhdGU6IGNhcHR1cmVBbGwgPyAiYWxsIiA6ICJ1bmNhdWdodCIsCiAgICB9KTsKICB9IGNhdGNoIChlcnJvcikgewogICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIGVycm9yICIsIGVycm9yKTsKICAgIH0KICB9CgogIGlmIChnbG9iYWwuc2ZEZWJ1ZykgewogICAgY29uc29sZS5sb2coIltXb3JrZXJdIERlYnVnZ2VyIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LiIpOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gdW5yb2xsT2JqZWN0KHNlc3Npb24sIG9iamVjdElkLCBuYW1lLCB2YXJzKSB7CiAgY29uc3QgcHJvcGVydGllcyA9IGF3YWl0IHNlc3Npb24ucG9zdCgiUnVudGltZS5nZXRQcm9wZXJ0aWVzIiwgewogICAgb2JqZWN0SWQsCiAgICBvd25Qcm9wZXJ0aWVzOiB0cnVlLAogIH0pOwoKICB2YXJzW25hbWVdID0gcHJvcGVydGllcy5yZXN1bHQKICAgIC5tYXAoKHYpID0+IFt2Lm5hbWUsIHYudmFsdWU/LnZhbHVlXSkKICAgIC5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsXSkgPT4gewogICAgICBvYmpba2V5XSA9IHZhbDsKICAgICAgcmV0dXJuIG9iajsKICAgIH0sIHt9KTsKfQoKYXN5bmMgZnVuY3Rpb24gdW5yb2xsQXJyYXkoc2Vzc2lvbiwgb2JqZWN0SWQsIG5hbWUsIHZhcnMpIHsKICBjb25zdCBwcm9wZXJ0aWVzID0gYXdhaXQgc2Vzc2lvbi5wb3N0KCJSdW50aW1lLmdldFByb3BlcnRpZXMiLCB7CiAgICBvYmplY3RJZDogb2JqZWN0SWQsCiAgICBvd25Qcm9wZXJ0aWVzOiB0cnVlLAogIH0pOwogIHZhcnNbbmFtZV0gPSBwcm9wZXJ0aWVzLnJlc3VsdAogICAgLmZpbHRlcigodikgPT4gdi5uYW1lICE9PSAibGVuZ3RoIiAmJiAhaXNOYU4ocGFyc2VJbnQodi5uYW1lLCAxMCkpKQogICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEubmFtZSwgMTApIC0gcGFyc2VJbnQoYi5uYW1lLCAxMCkpCiAgICAubWFwKCh2KSA9PiB2LnZhbHVlPy52YWx1ZSk7Cn0KCmZ1bmN0aW9uIHVucm9sbE90aGVyKHByb3AsIHZhcnMpIHsKICBpZiAoIXByb3AudmFsdWUpIHsKICAgIHJldHVybjsKICB9CgogIGlmICgidmFsdWUiIGluIHByb3AudmFsdWUpIHsKICAgIGlmIChwcm9wLnZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcC52YWx1ZS52YWx1ZSA9PT0gbnVsbCkgewogICAgICB2YXJzW3Byb3AubmFtZV0gPSBgPCR7cHJvcC52YWx1ZS52YWx1ZX0+YDsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhcnNbcHJvcC5uYW1lXSA9IHByb3AudmFsdWUudmFsdWU7CiAgICByZXR1cm47CiAgfQoKICBpZiAoImRlc2NyaXB0aW9uIiBpbiBwcm9wLnZhbHVlICYmIHByb3AudmFsdWUudHlwZSAhPT0gImZ1bmN0aW9uIikgewogICAgdmFyc1twcm9wLm5hbWVdID0gYDwke3Byb3AudmFsdWUuZGVzY3JpcHRpb259PmA7CiAgICByZXR1cm47CiAgfQoKICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAidW5kZWZpbmVkIikgewogICAgdmFyc1twcm9wLm5hbWVdID0gIjx1bmRlZmluZWQ+IjsKICAgIHJldHVybjsKICB9Cn0KCi8qKgogKiBGZXRjaGVzIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgSUQuCiAqIEBwYXJhbSB7U2Vzc2lvbn0gc2Vzc2lvbiAtIFRoZSBkZWJ1Z2dpbmcgc2Vzc2lvbiBpbnN0YW5jZS4KICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdElkIC0gVGhlIG9iamVjdCBJRCByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHNjb3BlLgogKiBAcmV0dXJucyB7b2JqZWN0fSBBIGtleS12YWx1ZSBtYXAgb2YgbG9jYWwgdmFyaWFibGUgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcy4KICovCmFzeW5jIGZ1bmN0aW9uIGZldGNoTG9jYWxWYXJpYWJsZXMoc2Vzc2lvbiwgb2JqZWN0SWQpIHsKICBpZiAoIW9iamVjdElkKSByZXR1cm4ge307CgogIHRyeSB7CiAgICBjb25zdCB7IHJlc3VsdCB9ID0gYXdhaXQgc2Vzc2lvbi5wb3N0KCJSdW50aW1lLmdldFByb3BlcnRpZXMiLCB7CiAgICAgIG9iamVjdElkLAogICAgICBvd25Qcm9wZXJ0aWVzOiB0cnVlLAogICAgfSk7CgogICAgY29uc3QgcHJvcGVydGllcyA9IHJlc3VsdDsKICAgIGlmIChwcm9wZXJ0aWVzKSB7CiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHt9OwogICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykgewogICAgICAgIGlmIChwcm9wPy52YWx1ZT8ub2JqZWN0SWQgJiYgcHJvcD8udmFsdWUuY2xhc3NOYW1lID09PSAiQXJyYXkiKSB7CiAgICAgICAgICBjb25zdCBpZCA9IHByb3AudmFsdWUub2JqZWN0SWQ7CiAgICAgICAgICBhd2FpdCB1bnJvbGxBcnJheShzZXNzaW9uLCBpZCwgcHJvcC5uYW1lLCB2YXJpYWJsZXMpOwogICAgICAgIH0gZWxzZSBpZiAoCiAgICAgICAgICBwcm9wPy52YWx1ZT8ub2JqZWN0SWQgJiYKICAgICAgICAgIHByb3A/LnZhbHVlPy5jbGFzc05hbWUgPT09ICJPYmplY3QiCiAgICAgICAgKSB7CiAgICAgICAgICBjb25zdCBpZCA9IHByb3AudmFsdWUub2JqZWN0SWQ7CiAgICAgICAgICBhd2FpdCB1bnJvbGxPYmplY3Qoc2Vzc2lvbiwgaWQsIHByb3AubmFtZSwgdmFyaWFibGVzKTsKICAgICAgICB9IGVsc2UgaWYgKHByb3A/LnZhbHVlKSB7CiAgICAgICAgICB1bnJvbGxPdGhlcihwcm9wLCB2YXJpYWJsZXMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdmFyaWFibGVzOwogICAgfQogIH0gY2F0Y2ggKGVycikgewogICAgaWYgKGdsb2JhbC5zZkRlYnVnKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIEZhaWxlZCB0byBmZXRjaCBsb2NhbCB2YXJpYWJsZXM6IiwgZXJyKTsKICAgIH0KICAgIHJldHVybiB7fTsKICB9Cn0KCnN0YXJ0RGVidWdnZXIoKS5jYXRjaCgoZXJyb3IpID0+IHsKICBpZiAoZ2xvYmFsLnNmRGVidWcpIHsKICAgIGNvbnNvbGUuZXJyb3IoIltXb3JrZXJdIEZhaWxlZCB0byBzdGFydCBkZWJ1Z2dlcjoiLCBlcnJvcik7CiAgfQp9KTsKCi8vIEtlZXAgdGhlIHdvcmtlciBhbGl2ZQpzZXRJbnRlcnZhbCgoKSA9PiB7fSwgMTAwMDApOwo="),{workerData:{captureAllExceptions:!0}});let n=null;const i=new WeakMap;e.on("message",a=>{if(typeof a=="string"&&r.getConfig().sfDebug&&console.log(`[Worker] ${a}`),a.readyToGetParameters&&e.postMessage({sfDebug:r.getConfig().sfDebug,stackDepthLocals:r.getConfig().stackDepthLocals,nodeModulesToCollectLocalVariablesOn:r.getConfig().nodeModulesToCollectLocalVariablesOn}),a.type==="exception"){const{frames:g}=a,c=n;if(!c)return;const d=i.get(c),I=(function(C){return C?C.split(`
|
|
50
|
+
`).slice(1).map(u=>{const m=/at (.+?) \((.+):(\d+):(\d+)\)/.exec(u)||/at (.+):(\d+):(\d+)/.exec(u);if(m){const[,h,Z,b,y]=m;return new F({function:h||"<anonymous>",locals:{},file:Z||"<unknown>",line:parseInt(b,10)||0,code:"<not captured>",column:parseInt(y)||0})}return new F({function:"<unknown>",locals:{},file:"<unknown>",line:0,code:"<not captured>",column:0})}):[]})(c.stack),p=(function(C,u){const m=[];let h=-1,Z=-1;for(let b=0;b<C.length;b++){const y=Ze(C[b].file);if(Z=b,y!=="<unknown>"){for(let f=0;f<u.length;f++){const v=u[f];if(Ie(v,y)||typeof v.file=="string"&&v.file.includes(y)){h=f,W=0,r.getConfig().sfDebug&&console.log(`✅ Matched Frame Found: ${y} @ Debugger Frame ${f}`);break}}if(h!==-1)break}}if(h===-1)return W===10?(W=0,C):(++W,r.getConfig().sfDebug&&console.log(`"❌ No matching frame found. Checking once again, Attempt N ${W}"`),[]);r.getConfig().sfDebug&&console.log(`🔄 Merging from matched index ${h} onward...`);for(let b=0;b<u.length;b++){const y=C[Z+b],f=u[h+b];m.push(new F({function:f?.function||y?.function||"<anonymous>",locals:f?.locals||y?.locals||{},file:y?.file||f?.file||"<unknown>",line:f?.line||y?.line||0,code:f?.code||y?.code||"<not captured>"}))}return m})(I,g||[]);if(p.length!==0){n=null;const C=r.getConfig().stackDepthCodeTraceDepth,u=C===-1?p:p.slice(0,C+1),m=Math.min(u.length,I.length);for(let y=0;y<m;y++)(async()=>{const f=ye(u[y].file,I[y].line,I[y].column);f&&(f.content!=null&&(u[y].code=f.content),f.file!=null&&(u[y].file=f.file))})();o.setOperationName("CollectExceptions");const h=c.message?`${c.name}: ${c.message}`:c.name;r.getConfig().sfDebug&&console.log("error message is : ",h);const Z=r.ContextManager.getInstance(),b=i.get(c);b?(Z.setTraceIdFor(b,b),Z.runWithSession(b,()=>{Z.setTraceId(b),o.doSend(h,u)})):o.doSend(h,u),d?r.ContextManager.getInstance().runWithSession(d,()=>{o.doSend(h,u)}):o.doSend(h,u)}}}),e.on("error",a=>{console.error("[Worker Error]",a)}),e.on("exit",a=>{console.error(`[Worker] Exited with code ${a}`)}),e.unref();const t=Error,s=new Set;function l(...a){const g=Reflect.construct(t,a);Reflect.setPrototypeOf(g,l.prototype);try{const d=r.ContextManager.getInstance().getTraceId();i.set(g,d)}catch{}t.captureStackTrace&&t.captureStackTrace(g,l);const c=`${g.message}:${g.stack?.split(`
|
|
51
|
+
`)[1]?.trim()}`;if(!s.has(c)){s.add(c),n=g;const d=r.ContextManager.getInstance().getTraceId();i.set(g,d),e.postMessage({type:"processException",error:g.message})}return g}l.prototype=Object.create(t.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),Object.setPrototypeOf(l,t),globalThis.Error=l}function j(o){return o=(o=(o=o.replace(/^webpack:\/\/[^\/]+\/\.?\//,"")).replace(/^.*\/pages\//,"pages/")).replace(/\.(js|ts)$/,"")}function ye(o,e,n){const i=(function(s){s.startsWith("at ")&&(s=s.slice(3).trim());const l=s.match(/^(.*?)(:\d+)+(\.map)?$/);return l?l[1]:s})(o);if(!i||i==="<unknown>")return null;const t=i+".map";try{const s=X.readFileSync(t,"utf-8");if(s){const l=JSON.parse(s);let a=new D.sourceMapExports.SourceMapConsumer(l).originalPositionFor({line:e,column:n});if(i&&a.source){const g=j(i),c=l.sources.findIndex(d=>j(d)===g);if(c===-1)r.getConfig().sfDebug&&console.log(`Source file "${i}" not found in the source map.`);else{const d=l.sourcesContent[c],I=l.names.join(",");if(d)return{content:d.split(`
|
|
52
|
+
`).slice(a.line-1,a.line+20).join(`
|
|
53
|
+
`),name:I,file:a.source};r.getConfig().sfDebug&&console.log(`No source content available for file "${i}".`)}}return{content:l.sourcesContent[0],name:l.names[0],file:l.file}}}catch(s){r.getConfig().sfDebug&&console.log(`Cant read/parse "${t}: Error - ".`,s)}return null}function Ze(o){return o?.split("/").pop()||"<unknown>"}function Ie(o,e){if(!o||typeof o!="object")return!1;for(const n of Object.values(o))if(typeof n=="string"&&n.includes(e)||typeof n=="object"&&Ie(n,e))return!0;return!1}let M=!1;function Q(o){if(!o)return;const e=o.toLowerCase().trim();return!!["1","true","yes","on"].includes(e)||!["0","false","no","off"].includes(e)&&void 0}function U(o,e,n){return new Promise(i=>{try{const t=new URL(o),s=(t.protocol,G).request({method:"GET",hostname:t.hostname,port:t.port||(t.protocol==="https:"?443:80),path:t.pathname+(t.search||""),headers:e},l=>{l.resume(),l.statusCode&&l.statusCode>=200&&l.statusCode<400?i("ok"):i("http_error")});s.on("error",()=>i("error")),s.setTimeout(n,()=>{s.destroy(),i("timeout")}),s.end()}catch{i("error")}})}class Se extends r.BaseTransmitter{constructor(){super();A(this,"serviceIdentifier",new V);A(this,"supplementalFields",{});this.setOperationName("CollectExceptions")}setSupplementalFields(n){this.supplementalFields={...this.supplementalFields,...n}}normalizedSupplementalForGraphQL(){const{isFromLocalService:n}=this.supplementalFields,i={};return n!==void 0&&(i.isFromLocalService=n),i}async sendAppIdentifier(){this.serviceIdentifier.doSend({})}async doSend(n,i){this.sendAppIdentifier(),this.send(n,i)}async send(n,i){r.getConfig().sfDebug&&console.log(" SENDING EXCEPTION...");const t=JSON.stringify(R.encode(i)),s=this.normalizedSupplementalForGraphQL(),l=this.getVariables({exceptionMessage:n,traceJson:t,reentrancyGuardPreactive:!1,library:r.getConfig().packageLibraryType,version:r.getConfig().version,...s});r.nonBlockingPost(this.endpoint,this.operationName,this.getQuery(),l)}getQuery(){return`
|
|
54
54
|
mutation ${this.operationName}(
|
|
55
55
|
$apiKey: String!,
|
|
56
56
|
$serviceUuid: String!,
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
parentSpanId: $parentSpanId
|
|
79
79
|
)
|
|
80
80
|
}
|
|
81
|
-
`}}const
|
|
81
|
+
`}}const q="getting request source code";var Y=(o=>(o.UNKNOWN="unknown",o.ANONYMOUS="anonymous",o.NOT_CAPTURED="not captured",o))(Y||{});const _="http:",z="https:",Ge=pe.createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:k&&k.tagName.toUpperCase()==="SCRIPT"&&k.src||new URL("sf-veritas.cjs",document.baseURI).href);let ee=!1;function Be(){const o=r.getConfig().sfDebug;if(ee)return void(o&&console.log("[patchNodeHttpInbound] Already installed, skipping."));let e;ee=!0;try{e=Ge("node:http"),o&&console.log("[patchNodeHttpInbound] node:http required successfully.")}catch(t){return void console.error("Failed to require node:http:",t)}if(!e?.Server?.prototype)return void(o&&console.log("[patchNodeHttpInbound] http.Server.prototype not found."));const n=e.Server.prototype,i=n.emit;i&&!n.__sf_inbound_patched__?(Object.defineProperty(n,"__sf_inbound_patched__",{value:!0,enumerable:!1,configurable:!1,writable:!1}),o&&console.log("[patchNodeHttpInbound] Patching http.Server.prototype.emit."),n.emit=function(t,...s){if(t!=="request")return o&&console.log(`[patchNodeHttpInbound] Passing through event: ${t}`),i.call(this,t,...s);const l=s[0],a=s[1],g=(function(C){const u={};if(!C)return u;for(const[m,h]of Object.entries(C))h!=null&&(Array.isArray(h)?u[m.toLowerCase()]=h.join(", "):u[m.toLowerCase()]=String(h));return u})(l?.headers),c=g["x-sf3-rid"],d=g["x-sf3-functionspancaptureoverride"];o&&(console.log("[patchNodeHttpInbound] Intercepted request event."),console.log("[patchNodeHttpInbound] Inbound headers:",g),console.log("[patchNodeHttpInbound] Trace header:",c),console.log("[patchNodeHttpInbound] FuncSpan override header:",d));const I=r.ContextManager.getInstance();I.setTraceId(c);const p=I.getTraceId();return o&&console.log("[patchNodeHttpInbound] Context traceId set:",p),I.runWith({inboundHeaders:g,...c?{traceId:c}:{}},()=>{c&&I.setTraceId(c),d&&(r.setFuncspanOverride(d),o&&console.log("[patchNodeHttpInbound] FuncSpan override set:",d)),o&&console.log("[patchNodeHttpInbound] Running request handler in context.");const C=()=>{o&&console.log("[patchNodeHttpInbound] Response finished/closed for traceId:",I.getTraceId()),d&&(r.clearFuncspanOverride(),o&&console.log("[patchNodeHttpInbound] FuncSpan override cleared"))};return a.on("finish",C),a.on("close",C),i.call(this,t,l,a)})}):o&&console.log("[patchNodeHttpInbound] Already patched, skipping.")}class ve extends P{constructor(){super(),this.setOperationName("DomainsToNotPassHeaderTo")}async doSend(e){this.sendAppIdentifier(),this.send(e)}async send(e){const n=`
|
|
82
82
|
${this.queryType} ${this.operationName}(
|
|
83
83
|
$apiKey: String!,
|
|
84
84
|
$serviceUuid: String!,
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
domains: $domains
|
|
91
91
|
)
|
|
92
92
|
}
|
|
93
|
-
`,
|
|
93
|
+
`,i={apiKey:this.apiKey,serviceUuid:this.serviceUUID,domains:e};r.nonBlockingPost(this.endpoint,this.operationName,n,i)}}class We extends r.BaseTransmitter{constructor(){super();A(this,"serviceIdentifier",new V);this.setOperationName("CollectNetworkHops")}async sendAppIdentifier(){this.serviceIdentifier.doSend({})}async doSend(n){this.sendAppIdentifier(),this.send(n)}async send(n){const{name:i,column:t,line:s,entrypoint:l,retryWithoutTraceId:a}=n,g=this.getVariables({name:i,column:t,line:s,entrypoint:l,retryWithoutTraceId:a});r.nonBlockingPost(this.endpoint,this.operationName,this.getQuery(),g)}getQuery(){return`
|
|
94
94
|
mutation ${this.operationName}(
|
|
95
95
|
$apiKey: String!,
|
|
96
96
|
$sessionId: String!,
|
|
@@ -114,15 +114,15 @@
|
|
|
114
114
|
${this.operationName==="CollectNetworkHops"?", retryWithoutTraceId: $retryWithoutTraceId":""}
|
|
115
115
|
)
|
|
116
116
|
}
|
|
117
|
-
`}}class
|
|
117
|
+
`}}class Ne extends r.BaseTransmitter{constructor(){super();A(this,"serviceIdentifier",new V);this.setOperationName("CollectNetworkRequest")}async sendAppIdentifier(){this.serviceIdentifier.doSend({})}async doSend(n){this.sendAppIdentifier(),this.send(n)}getQuery(){return`
|
|
118
118
|
mutation ${this.operationName}(
|
|
119
119
|
$data: NetworkRequestInput!
|
|
120
120
|
) {
|
|
121
121
|
${this.queryName}(
|
|
122
122
|
data: $data)
|
|
123
123
|
}
|
|
124
|
-
`}async send(
|
|
125
|
-
`).slice(1),c=[];for(const d of
|
|
124
|
+
`}async send(n){const i={data:{...n}};await r.nonBlockingPost(this.endpoint,this.operationName,this.getQuery(),i)}}const E=[400,403];class Fe{constructor(e=[]){A(this,"HEADER_TRACING","X-Sf3-Rid");A(this,"HEADER_LOG_GUARD","reentrancy_guard_logging_preactive");A(this,"HEADER_PRINT_GUARD","reentrancy_guard_print_preactive");A(this,"HEADER_EXCEPTION_GUARD","reentrancy_guard_exception_preactive");A(this,"contextManager");this.contextManager=r.ContextManager.getInstance(),e?.forEach(n=>{typeof n=="string"&&n.trim()&&this.contextManager.getExcludedDomains().add(n)}),r.getConfig().sfDebug&&console.log("[RequestInterceptor] Initialized with static excluded domains.")}extractIdsFromTraceHeader(e,n=this.HEADER_TRACING){let i;if(e instanceof Headers)i=e.get(n)??void 0;else{const s=n.toLowerCase();for(const[l,a]of Object.entries(e))if(l.toLowerCase()===s){i=a;break}}if(!i)return{};const t=i.split("/").filter(Boolean);return t.length<3?{}:{sessionId:t[0],pageVisitId:t[1],requestId:t[t.length-1]}}parseStackFrame(e){const n=/\((.*):(\d+):(\d+)\)$/.exec(e.trim());if(!n)return null;const[,i,t,s]=n;return{filePath:i,line:parseInt(t,10),column:parseInt(s,10)}}async getOriginalPosition(e,n,i){let t={source:e,line:n,column:i,name:null};const s=e+".map";try{const l=JSON.parse(X.readFileSync(s,"utf-8"));let a=(await new D.sourceMapExports.SourceMapConsumer(l)).originalPositionFor({line:n,column:i});a.source&&(t=a)}catch(l){r.getConfig().sfDebug&&console.error(`Could not read/parse map file at ${s}:`,l)}return{originalPos:t}}captureFirstUserLines(e,n=10,i=!1){const t=r.getConfig().sfDebug?10:n,s=Error.stackTraceLimit;Error.stackTraceLimit=Math.max(s,t);const l=new Error(q);q in Error&&Error.captureStackTrace(l,this.captureFirstUserLines);const a=l.stack||"";Error.stackTraceLimit=s;const g=a.split(`
|
|
125
|
+
`).slice(1),c=[];for(const d of g)if(!(d.includes("node:internal")||d.includes("internal/modules")||d.includes("internal/process")||d.includes("node_modules")||d.includes(".next/server/chunks")||d.includes("RequestInterceptor")||d.includes("contextManager")||d.includes("setupConfig"))&&(c.push(d.trim()),c.length>=n))break;for(const d of c){const I=this.parseStackFrame(d);I?(async()=>{const{originalPos:p}=await this.getOriginalPosition(I.filePath,I.line,I.column);if(p){r.getConfig().sfDebug&&console.log("[RequestInterceptor] First user code line:",p);const C={line:p.line?.toString()||Y.UNKNOWN,column:p.column?.toString()||Y.NOT_CAPTURED,name:p.name||Y.NOT_CAPTURED,entrypoint:p.source,retryWithoutTraceId:i};e.doSend(C)}})():r.getConfig().sfDebug&&console.error("Could not parse stack line:",d)}}addReentrancyGuardHeaders(e){e.set(this.HEADER_LOG_GUARD,"true"),e.set(this.HEADER_PRINT_GUARD,"true"),e.set(this.HEADER_EXCEPTION_GUARD,"true")}shouldPropagateHeaders(e){return!r.DEFAULT_DOMAINS_TO_EXCLUDE.some(n=>new RegExp(`^${n.replace(/\*/g,".*")}$`).test(e))}addTracingHeaders(e,n){const i=new URL(n).hostname,t=this.shouldPropagateHeaders(i);return t?this.addTracingHeader(e,n):r.getConfig().sfDebug&&console.error(`[RequestInterceptor] Excluded domain: ${i}`),t}addTracingHeader(e,n){const i=r.getFuncspanOverride();if(i){const a=r.parseHeaderOverride(i);if(a&&a.sample_rate===0)return void(r.getConfig().sfDebug&&console.log(`[RequestInterceptor] Function span tracking disabled (sample_rate=0), skipping tracing header for ${n}`))}const t=this.contextManager.getOrSetSfTraceId(),s=this.contextManager.getOrSetPageVisitUUID(),l=r.v4();e.set(this.HEADER_TRACING,`${t}/${s}/${l}`),r.getConfig().sfDebug&&console.log(`[RequestInterceptor] Added tracing header for ${n}`)}patchFetch(e,n){const i=globalThis.fetch;typeof i=="function"?globalThis.fetch=async(t,s)=>{const l=new Headers(s?.headers);if(l.get(this.HEADER_LOG_GUARD)==="true"||l.get(this.HEADER_PRINT_GUARD)==="true"||l.get(this.HEADER_EXCEPTION_GUARD)==="true")return i(t,s);this.captureFirstUserLines(e);const a=Date.now();let g;typeof t=="string"||t instanceof URL?g=t.toString():t instanceof Request?(g=t.url,t.headers.forEach((u,m)=>{l.set(m,u)})):r.getConfig().sfDebug&&console.error("[Sailfish RequestInterceptor] Invalid fetch input."),r.getConfig().sfDebug&&console.log("[RequestInterceptor] Fetching request to:",g);const c=new URL(g).hostname,d=new Headers(l),I=this.addTracingHeaders(l,g),p={...s,headers:l};let C;try{let u=!1;this.addTracingHeaders(d,g),C=await i(g,p),I&&E.includes(C.status)?(C=await i(g,{...s,headers:d}),u=!0,this.captureFirstUserLines(e,10,u)):this.contextManager.addSupportedDomains(c);const m=Date.now();r.getConfig().sfDebug&&console.log(`[RequestInterceptor] Fetch completed: ${g}, Status: ${C.status}, Duration: ${m-a}ms`);const{sessionId:h,pageVisitId:Z,requestId:b}=this.extractIdsFromTraceHeader(l);return n.doSend({apiKey:r.getConfig().apiKey,requestId:b,pageVisitId:Z,recordingSessionId:h,serviceUuid:r.getConfig().serviceUUID,timestampStart:a.toString(),timestampEnd:m.toString(),responseCode:C.status,success:!0,error:null,url:g,method:p.method||"GET",retryWithoutTraceId:u,parentSpanId:r.getCurrentFunctionSpanId()}),C}catch(u){const m=Date.now();r.getConfig().sfDebug&&console.error(`[RequestInterceptor] Fetch failed: ${g}, Error: ${u}, Duration: ${m-a}ms`)}}:r.getConfig().sfDebug&&console.error("[RequestInterceptor] Fetch not available.")}patchHttp(e,n){if(r.getConfig().sfDebug&&console.log("[RequestInterceptor] Initializing HTTP/HTTPS request patch..."),!G||typeof G.request!="function")return void(r.getConfig().sfDebug&&console.log("[RequestInterceptor] HTTP/HTTPS not available."));const i=G.request.bind(G),t=G.request.bind(G);G.request=function(s,l){let a;try{if(typeof s=="string"){const c=new URL(s);a={protocol:c.protocol||_,hostname:c.hostname,path:c.pathname+c.search,headers:{}}}else s instanceof URL?a={protocol:s.protocol||_,hostname:s.hostname,path:s.pathname+s.search,headers:{}}:(a={...s},a.protocol||(a.protocol=_));if(a.headers){const c=`${a.protocol}//${a.hostname}`;this.addTracingHeaders(a.headers,c),this.captureFirstUserLines(e)}else r.getConfig().sfDebug&&console.warn("[RequestInterceptor] No headers found in HTTP request options. Skipping header addition.")}catch(c){throw r.getConfig().sfDebug&&console.error("[RequestInterceptor] Error while processing HTTP request options:",c),c}let g=!1;return i(a,c=>{const d=`${a.protocol}//${a.hostname}`;if(a.headers&&this.shouldPropagateHeaders(new URL(d).hostname)&&E.includes(c.statusCode||0)){a.hostname;const u={...a,headers:{...a.headers}};delete u.headers[this.HEADER_TRACING],i(u,l),g=!0,this.captureFirstUserLines(e,10,g)}const{sessionId:I,pageVisitId:p,requestId:C}=this.extractIdsFromTraceHeader(a.headers);n.doSend({apiKey:r.getConfig().apiKey,requestId:C,pageVisitId:p,recordingSessionId:I,serviceUuid:r.getConfig().serviceUUID,timestampStart:Date.now().toString(),timestampEnd:Date.now().toString(),responseCode:c.statusCode||0,success:!!c.statusCode&&c.statusCode<400,error:null,url:d,method:a.method||"GET",retryWithoutTraceId:g,parentSpanId:r.getCurrentFunctionSpanId()}),l?.(c)})},G.request=function(s,l){let a;try{if(typeof s=="string"){const c=new URL(s);a={protocol:c.protocol||z,hostname:c.hostname,path:c.pathname+c.search,headers:{}}}else s instanceof URL?a={protocol:s.protocol||z,hostname:s.hostname,path:s.pathname+s.search,headers:{}}:(a={...s},a.protocol||(a.protocol=z));if(a.headers){const c=`${a.protocol}//${a.hostname}`;this.addTracingHeaders(a.headers,c)}else r.getConfig().sfDebug&&console.warn("[RequestInterceptor] No headers found in HTTPS request options. Skipping header addition.")}catch(c){throw r.getConfig().sfDebug&&console.error("[RequestInterceptor] Error while processing HTTPS request options:",c),c}let g=!1;return t(a,c=>{const d=`${a.protocol}//${a.hostname}`;if(a.headers&&this.shouldPropagateHeaders(new URL(d).hostname)&&E.includes(c.statusCode||0)){const u={...a,headers:{...a.headers}};delete u.headers[this.HEADER_TRACING],t(u,l),g=!0,this.captureFirstUserLines(e,10,g)}const{sessionId:I,pageVisitId:p,requestId:C}=this.extractIdsFromTraceHeader(a.headers);n.doSend({apiKey:r.getConfig().apiKey,requestId:C,pageVisitId:p,recordingSessionId:I,serviceUuid:r.getConfig().serviceUUID,timestampStart:Date.now().toString(),timestampEnd:Date.now().toString(),responseCode:c.statusCode||0,success:!!c.statusCode&&c.statusCode<400,error:null,url:d,method:a.method||"GET",retryWithoutTraceId:g,parentSpanId:r.getCurrentFunctionSpanId()}),l?.(c)})},r.getConfig().sfDebug&&console.log("✅ HTTP and HTTPS request methods patched globally.")}tryPatch(e,n){try{require.resolve(n),e(),console.log(`[RequestInterceptor] Patched ${n}`)}catch(i){console.warn(`[RequestInterceptor] Could not patch ${n}: ${i.message}`)}}getExcludedDomains(){return[...this.contextManager.getExcludedDomains()]}}class we extends P{constructor(){super(),this.setOperationName("UpdateServiceDetails")}async doSend(){this.sendAppIdentifier(),this.send()}async send(){const e=`
|
|
126
126
|
${this.queryType} ${this.operationName}(
|
|
127
127
|
$apiKey: String!,
|
|
128
128
|
$serviceUuid: String!,
|
|
@@ -142,42 +142,6 @@
|
|
|
142
142
|
gitSha: $gitSha,
|
|
143
143
|
)
|
|
144
144
|
}
|
|
145
|
-
`,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
$serviceUuid: String!,
|
|
149
|
-
$sessionId: String!,
|
|
150
|
-
$timestampMs: String!,
|
|
151
|
-
$parentSpanId: String,
|
|
152
|
-
$library: String!,
|
|
153
|
-
$version: String!,
|
|
154
|
-
$spanId: String!,
|
|
155
|
-
$filePath: String!,
|
|
156
|
-
$lineNumber: Int!,
|
|
157
|
-
$columnNumber: Int!,
|
|
158
|
-
$functionName: String!,
|
|
159
|
-
$arguments: String!,
|
|
160
|
-
$returnValue: String,
|
|
161
|
-
$startTimeNs: String!,
|
|
162
|
-
$durationNs: String!
|
|
163
|
-
) {
|
|
164
|
-
${this.queryName}(
|
|
165
|
-
apiKey: $apiKey,
|
|
166
|
-
serviceUuid: $serviceUuid,
|
|
167
|
-
sessionId: $sessionId,
|
|
168
|
-
timestampMs: $timestampMs,
|
|
169
|
-
parentSpanId: $parentSpanId,
|
|
170
|
-
library: $library,
|
|
171
|
-
version: $version,
|
|
172
|
-
spanId: $spanId,
|
|
173
|
-
filePath: $filePath,
|
|
174
|
-
lineNumber: $lineNumber,
|
|
175
|
-
columnNumber: $columnNumber,
|
|
176
|
-
functionName: $functionName,
|
|
177
|
-
arguments: $arguments,
|
|
178
|
-
returnValue: $returnValue,
|
|
179
|
-
startTimeNs: $startTimeNs,
|
|
180
|
-
durationNs: $durationNs
|
|
181
|
-
)
|
|
182
|
-
}
|
|
183
|
-
`}}let ne=null;function D(o){const e=x(),t=e?.sfDebug||!1;t&&console.log("[FuncSpan] captureSpanData called for:",{function:o.functionName,file:o.filePath,duration:`${o.duration}ms`,async:o.async,error:o.error,spanId:o.spanId});const n={functionName:o.functionName,filePath:o.filePath,metadata:o.metadata,args:o.args,result:o.result,error:o.error,duration:o.duration,async:o.async,spanId:o.spanId,parentSpanId:o.parentSpanId};t&&console.log("[FuncSpan] Sending function span to transmitter:",n);try{(ne||(ne=new qe),ne).send([n]),t&&console.log("[FuncSpan] Function span sent successfully")}catch(i){console.error("[FuncSpan] Error sending function span:",i)}}exports.ContextManager=v,exports.addOrUpdateMetadata=function(o,e={},t,n=!1){const i=l();new Ce(i.apiKey).addOrUpdateMetadata(o,e,t,n)},exports.captureFunctionSpan=function(o,e,t,n){const i=function(...s){const g=x(),r=g?.sfDebug||!1;r&&console.log(`[FuncSpan] captureFunctionSpan wrapper called for ${t}::${e}`);const a=(function(u,A){const m=oe();if(m){const y=ie(m);if(y)return process.env.SF_DEBUG==="true"&&console.log(`[FuncSpan] Using HTTP header override for ${u}::${A}`),y}return ye(u,A)})(t,e);if(r&&console.log(`[FuncSpan] Config for ${t}::${e}:`,a),a.enable_sampling&&a.sample_rate<1&&Math.random()>a.sample_rate)return r&&console.log(`[FuncSpan] Skipping ${e} due to sampling`),o.apply(this,s);if(a.sample_rate===0)return r&&console.log(`[FuncSpan] Skipping ${e} - sample_rate is 0.0`),o.apply(this,s);r&&console.log(`[FuncSpan] Capturing function span for ${e}`);const c=v.getInstance(),d=c.getCurrentFunctionSpanId(),I=R();c.setCurrentFunctionSpanId(I);const h=Date.now();let p=null;a.capture_arguments&&(p={},n.paramNames.forEach((u,A)=>{A<s.length&&(p[u]=s[A])}),p&&a.arg_limit_mb>0&&(p=ee(p,a.arg_limit_mb)));try{const u=o.apply(this,s);if(u&&typeof u.then=="function")return u.then(y=>{const b=Date.now();let f=null;return a.capture_return_value&&a.return_limit_mb>0&&(f=ee(y,a.return_limit_mb)),D({functionName:e,filePath:t,metadata:n,args:p,result:f,error:null,duration:b-h,async:!0,spanId:I,parentSpanId:d}),d?c.setCurrentFunctionSpanId(d):c.clearCurrentFunctionSpanId(),y},y=>{const b=Date.now();throw D({functionName:e,filePath:t,metadata:n,args:p,result:null,error:y?.message||String(y),duration:b-h,async:!0,spanId:I,parentSpanId:d}),d?c.setCurrentFunctionSpanId(d):c.clearCurrentFunctionSpanId(),y});const A=Date.now();let m=null;return a.capture_return_value&&a.return_limit_mb>0&&(m=ee(u,a.return_limit_mb)),D({functionName:e,filePath:t,metadata:n,args:p,result:m,error:null,duration:A-h,async:!1,spanId:I,parentSpanId:d}),d?c.setCurrentFunctionSpanId(d):c.clearCurrentFunctionSpanId(),u}catch(u){const A=Date.now();throw D({functionName:e,filePath:t,metadata:n,args:p,result:null,error:u?.message||String(u),duration:A-h,async:!1,spanId:I,parentSpanId:d}),d?c.setCurrentFunctionSpanId(d):c.clearCurrentFunctionSpanId(),u}};Object.defineProperty(i,"name",{value:e,writable:!1});for(const s in o)o.hasOwnProperty(s)&&(i[s]=o[s]);return i},exports.clearFuncspanOverride=Fe,exports.getCurrentFunctionSpanId=$,exports.getDefaultConfig=ze,exports.getEnvConfig=ce,exports.getFuncspanOverride=oe,exports.getGlobalConfig=ye,exports.identify=function(o,e,t,n=!1){const i=l();new Ce(i.apiKey).identify(o,e,t,n)},exports.initializeConfigLoader=fe,exports.isConfigLoaderInitialized=Se,exports.parseHeaderOverride=ie,exports.runWithContext=function(o){const e={...v.getInstance().getCurrentContext()};K.run(e,()=>{o()})},exports.setFuncspanOverride=We,exports.setupInterceptors=function(o){if(!o||!o.apiKey){const i=`The required API Key is not provided: ${JSON.stringify(o)}`;console.error(i)}const{config:e}=Te(o);if(e.sfDebug&&console.log("Updated configuration after applying options:",e),!e.apiKey||!e.apiGraphqlEndpoint){const i=`The required config is not provided: ${JSON.stringify(e)}`;throw console.error(i),new Error(i)}Se()||fe(void 0,e.sfDebug).catch(i=>{e.sfDebug&&console.error("[FuncSpan] Failed to initialize config loader:",i)});const t=new ae;t.setServiceUUID(e.serviceUUID),(function(i){function s(I,h){i.setOperationName("CollectLogs"),i.doSend([h,I])}const g=console.log.bind(console),r=console.error.bind(console),a=console.warn.bind(console),c=console.info.bind(console),d=console.debug.bind(console);console.log=(...I)=>{s("INFO",I.join(" ")),g(...I)},console.error=(...I)=>{s("ERROR",I.join(" ")),r(...I)},console.warn=(...I)=>{s("WARN",I.join(" ")),a(...I)},console.info=(...I)=>{s("INFO",I.join(" ")),c(...I)},l().logLevel==="DEBUG"&&(console.debug=(...I)=>{s("DEBUG",I.join(" ")),d(...I)})})(t),(function(i=[]){const s=new Me(i);new ke().doSend(s.getExcludedDomains());const g=new Oe,r=new Pe;s.patchFetch(g,r),s.patchHttp(g,r)})(e.domainsToNotPropagateHeadersTo);const n=new Le;n.setServiceUUID(e.serviceUUID),_e(n),xe(),new je().send()};
|
|
145
|
+
`,n=this.getVariables({serviceIdentifier:r.getConfig().serviceIdentifier,serviceVersion:r.getConfig().serviceVersion,serviceAdditionalMetadata:r.getConfig().serviceAdditionalMetadata,gitSha:r.getConfig().gitSha||""});r.nonBlockingPost(this.endpoint,this.operationName,e,n)}}class Ve{constructor(e=[process.cwd()],n=!1){A(this,"rootPaths");A(this,"fileConfigs",new Map);A(this,"functionConfigs",new Map);A(this,"directoryConfigs",new Map);A(this,"hasSailfishFiles",!1);A(this,"debug");this.rootPaths=e,this.debug=n||process.env.SF_DEBUG==="true"}async loadAllConfigs(){this.debug&&console.log("[FuncSpan ConfigLoader] Scanning for .sailfish files in:",this.rootPaths);const e=[];for(const n of this.rootPaths)T.existsSync(n)?await this._walkDirectory(n,e):this.debug&&console.log(`[FuncSpan ConfigLoader] Root path does not exist: ${n}`);e.length>0?(this.hasSailfishFiles=!0,this.debug&&(console.log(`[FuncSpan ConfigLoader] Found ${e.length} .sailfish files:`),e.forEach(n=>console.log(`[FuncSpan ConfigLoader] - ${n}`)))):this.debug&&console.log("[FuncSpan ConfigLoader] No .sailfish files found - function spans disabled by default");for(const n of e)await this._loadConfigFile(n);await this._resolveInheritance(),this.debug&&console.log(`[FuncSpan ConfigLoader] Loaded ${this.fileConfigs.size} file configs, ${this.functionConfigs.size} function configs`)}getConfig(e,n){const i=this.hasSailfishFiles?r.getEnvConfig():r.getDefaultConfig(),t=this._getDirectoryConfig(e),s=S.normalize(e),l=this.fileConfigs.get(s)||{};let a={};if(n){const g=this.functionConfigs.get(s);g&&(a=g.get(n)||{})}return r.mergeConfigs(i,t,l,a)}async _walkDirectory(e,n){try{const i=T.readdirSync(e,{withFileTypes:!0});for(const t of i){const s=S.join(e,t.name);t.isFile()&&t.name===".sailfish"?n.push(s):t.name==="node_modules"||t.isDirectory()&&t.name.startsWith(".")&&t.name!==".sailfish"||t.isDirectory()&&await this._walkDirectory(s,n)}}catch(i){this.debug&&console.error(`[FuncSpan ConfigLoader] Error walking directory ${e}:`,i)}}async _loadConfigFile(e){try{const n=T.readFileSync(e,"utf-8"),i=S.dirname(e);let t=null;try{t=JSON.parse(n)}catch{try{t=require("js-yaml").load(n)}catch(s){return void(this.debug&&console.error(`[FuncSpan ConfigLoader] Failed to parse ${e} as JSON or YAML:`,s))}}if(!t)return;t.default&&this.directoryConfigs.set(i,t.default),t.files&&await this._expandFileGlobs(i,t.files,t.default||{}),t.functions&&this._storeFunctionConfigs(i,t.functions,t.default||{}),this.debug&&(console.log(`[FuncSpan ConfigLoader] Loaded config from ${e}`),console.log(`[FuncSpan ConfigLoader] Directory: ${i}`),console.log(`[FuncSpan ConfigLoader] Has default: ${!!t.default}`),console.log(`[FuncSpan ConfigLoader] File patterns: ${Object.keys(t.files||{}).length}`),console.log(`[FuncSpan ConfigLoader] Functions: ${Object.keys(t.functions||{}).length}`))}catch(n){this.debug&&console.error(`[FuncSpan ConfigLoader] Error loading ${e}:`,n)}}async _expandFileGlobs(e,n,i){for(const[t,s]of Object.entries(n))try{const l=S.join(e,t),a=await he.glob(l,{absolute:!0,nodir:!0,ignore:["**/node_modules/**","**/.git/**"]});this.debug&&console.log(`[FuncSpan ConfigLoader] Pattern '${t}' matched ${a.length} files`);for(const g of a){const c=S.normalize(g),d=r.mergeConfigs(i,s);this.fileConfigs.set(c,d),this.debug&&a.length<=5&&console.log(`[FuncSpan ConfigLoader] - ${g}`)}}catch(l){this.debug&&console.error(`[FuncSpan ConfigLoader] Error expanding glob '${t}':`,l)}}_storeFunctionConfigs(e,n,i){for(const[t,s]of Object.entries(n)){const l=t.split("::");if(l.length!==2){this.debug&&console.warn(`[FuncSpan ConfigLoader] Invalid function pattern '${t}' (expected format: 'file.ts::functionName')`);continue}const[a,g]=l,c=S.normalize(S.join(e,a));this.functionConfigs.has(c)||this.functionConfigs.set(c,new Map);const d=this.functionConfigs.get(c),I=r.mergeConfigs(i,s);d.set(g,I),this.debug&&console.log(`[FuncSpan ConfigLoader] Function config: ${c}::${g}`)}}async _resolveInheritance(){}_getDirectoryConfig(e){let n=S.dirname(S.normalize(e));const i=[];for(;n&&n!==S.dirname(n);){const t=this.directoryConfigs.get(n);t&&i.unshift(t),n=S.dirname(n)}return i.reduce((t,s)=>r.mergeConfigs(t,s),{})}}let w=null;async function ne(o,e){w=new Ve(o,e),await w.loadAllConfigs()}function te(o,e){return w?w.getConfig(o,e):(process.env.SF_DEBUG==="true"&&console.log("[FuncSpan ConfigLoader] Config loader not initialized, using env config for worker process"),r.getEnvConfig())}function oe(){return w!==null}const He=["readFile","writeFile","appendFile","readdir","stat","lstat","fstat","access","open","close","read","write","chmod","mkdir","rmdir","unlink","rename"],ie=["lookup","resolve","resolve4","resolve6","resolveAny","resolveMx","resolveNs","resolveTxt","reverse"],Ye=["pbkdf2","randomBytes","scrypt","generateKeyPair"],Re=["gzip","gunzip","deflate","inflate","deflateRaw","inflateRaw","brotliCompress","brotliDecompress"];let re=!1,se=!1;function Xe(){if(!se)try{const o=require("node:dns");if(o.__sf_worker_pool_patched__)return;Object.defineProperty(o,"__sf_worker_pool_patched__",{value:!0,enumerable:!1,writable:!1,configurable:!1});for(const e of ie)if(typeof o[e]=="function"){const n=o[e];o[e]=function(...i){const t=i[0];return typeof t=="string"&&(t==="localhost"||t==="127.0.0.1")?n.apply(this,i):typeof i[i.length-1]=="function"?r.captureWorkerPoolOperation("dns",e,n,i,this):n.apply(this,i)},Object.defineProperty(o[e],"name",{value:e,writable:!1})}(function(e){if(!e.promises)return void(process.env.SF_DEBUG==="true"&&console.log("[WorkerPool] dns.promises not available, skipping"));if(!e.promises.__sf_worker_pool_patched__){Object.defineProperty(e.promises,"__sf_worker_pool_patched__",{value:!0,enumerable:!1,writable:!1,configurable:!1});for(const n of ie)if(typeof e.promises[n]=="function"){const i=e.promises[n];e.promises[n]=function(...t){const s=t[0];return typeof s!="string"||s!=="localhost"&&s!=="127.0.0.1"?r.captureWorkerPoolPromiseOperation("dns",n,i,t,this):i.apply(this,t)},Object.defineProperty(e.promises[n],"name",{value:n,writable:!1})}process.env.SF_DEBUG==="true"&&console.log("[WorkerPool] dns.promises module patched successfully")}})(o),se=!0,process.env.SF_DEBUG==="true"&&console.log("[WorkerPool] dns module patched successfully")}catch(o){console.error("[WorkerPool] Error patching dns module:",o)}}let ae=!1,ce=!1,L=!1;function ge(){if(L)return;const o=process.env.SF_DEBUG==="true";o&&console.log("[WorkerPool] Initializing worker pool patching..."),r.isModuleTrackingEnabled("fs")&&(o&&console.log("[WorkerPool] Patching fs module..."),(function(){if(!re)try{const e=require("node:fs");if(e.__sf_worker_pool_patched__)return;Object.defineProperty(e,"__sf_worker_pool_patched__",{value:!0,enumerable:!1,writable:!1,configurable:!1});for(const n of He)if(typeof e[n]=="function"){const i=e[n];e[n]=function(...t){return typeof t[t.length-1]=="function"?r.captureWorkerPoolOperation("fs",n,i,t,this):i.apply(this,t)},Object.defineProperty(e[n],"name",{value:n,writable:!1})}re=!0,process.env.SF_DEBUG==="true"&&console.log("[WorkerPool] fs module patched successfully")}catch(e){console.error("[WorkerPool] Error patching fs module:",e)}})()),r.isModuleTrackingEnabled("dns")&&(o&&console.log("[WorkerPool] Patching dns module..."),Xe()),r.isModuleTrackingEnabled("crypto")&&(o&&console.log("[WorkerPool] Patching crypto module..."),(function(){if(!ae)try{const e=require("node:crypto");if(e.__sf_worker_pool_patched__)return;Object.defineProperty(e,"__sf_worker_pool_patched__",{value:!0,enumerable:!1,writable:!1,configurable:!1});for(const n of Ye)if(typeof e[n]=="function"){const i=e[n];e[n]=function(...t){return typeof t[t.length-1]=="function"?r.captureWorkerPoolOperation("crypto",n,i,t,this):i.apply(this,t)},Object.defineProperty(e[n],"name",{value:n,writable:!1})}ae=!0,process.env.SF_DEBUG==="true"&&console.log("[WorkerPool] crypto module patched successfully")}catch(e){console.error("[WorkerPool] Error patching crypto module:",e)}})()),r.isModuleTrackingEnabled("zlib")&&(o&&console.log("[WorkerPool] Patching zlib module..."),(function(){if(!ce)try{const e=require("node:zlib");if(e.__sf_worker_pool_patched__)return;Object.defineProperty(e,"__sf_worker_pool_patched__",{value:!0,enumerable:!1,writable:!1,configurable:!1});for(const n of Re)if(typeof e[n]=="function"){const i=e[n];e[n]=function(...t){return typeof t[t.length-1]=="function"?r.captureWorkerPoolOperation("zlib",n,i,t,this):i.apply(this,t)},Object.defineProperty(e[n],"name",{value:n,writable:!1})}ce=!0,process.env.SF_DEBUG==="true"&&console.log("[WorkerPool] zlib module patched successfully")}catch(e){console.error("[WorkerPool] Error patching zlib module:",e)}})()),L=!0,o&&console.log("[WorkerPool] Worker pool patching initialized")}function le(){return L}let $=null;function H(o){const e=r.getGlobalConfigUnsafe(),n=e?.sfDebug||!1;n&&console.log("[FuncSpan] captureSpanData called for:",{function:o.functionName,file:o.filePath,duration:`${o.duration}ms`,async:o.async,error:o.error,spanId:o.spanId});const i={functionName:o.functionName,filePath:o.filePath,metadata:o.metadata,args:o.args,result:o.result,error:o.error,duration:o.duration,durationNs:o.durationNs,async:o.async,spanId:o.spanId,parentSpanId:o.parentSpanId};process.env.SF_FUNCSPAN_CONSOLE_OUTPUT==="true"&&console.log(`
|
|
146
|
+
📊 Function Span:`,{function:`${o.functionName} (${o.filePath}:${o.metadata.line}:${o.metadata.column})`,duration:`${o.duration.toFixed(2)}ms`,arguments:o.args,result:o.error?`Error: ${o.error}`:o.result,spanId:o.spanId,parentSpanId:o.parentSpanId||"none"});const t=process.env.SF_FUNCSPAN_JSONL_FILE;if(t)try{const s=t==="true"||t==="1"?"funcspans.jsonl":t,l=Date.now(),a=process.hrtime.bigint(),g=BigInt(o.startTimeNs),c=Number(a-g)/1e6,d=new Date(l-c).toISOString(),I=JSON.stringify({timestamp:d,functionName:o.functionName,filePath:o.filePath,line:o.metadata.line,column:o.metadata.column,duration:o.duration,durationNs:o.durationNs,startTimeNs:o.startTimeNs,arguments:o.args,returnValue:o.error?{error:String(o.error)}:o.result,spanId:o.spanId,parentSpanId:o.parentSpanId,async:o.async,pid:o.pid,threadId:o.threadId})+`
|
|
147
|
+
`;X.appendFileSync(s,I,"utf-8")}catch(s){console.error("[FuncSpan] Error writing to JSONL file:",s)}if(n&&console.log("[FuncSpan] Sending function span to transmitter:",i),process.env.SF_FUNCSPAN_SKIP_BACKEND!=="true")try{($||($=new r.FunctionSpanTransmitter),$).send([i]),n&&console.log("[FuncSpan] Function span sent successfully")}catch(s){n&&console.error("[FuncSpan] Error sending function span:",s)}}exports.ContextManager=r.ContextManager,exports.clearFuncspanOverride=r.clearFuncspanOverride,exports.getCurrentFunctionSpanId=r.getCurrentFunctionSpanId,exports.getDefaultConfig=r.getDefaultConfig,exports.getEnvConfig=r.getEnvConfig,exports.getFuncspanOverride=r.getFuncspanOverride,exports.parseHeaderOverride=r.parseHeaderOverride,exports.runWithContext=r.runWithContext,exports.setFuncspanOverride=r.setFuncspanOverride,exports.transformFunctionSpans=D.transformFunctionSpans,exports.addOrUpdateMetadata=function(o,e={},n,i=!1){const t=r.getConfig();new O(t.apiKey).addOrUpdateMetadata(o,e,n,i)},exports.captureFunctionSpan=function(o,e,n,i){const t=function(...s){const l=r.getGlobalConfigUnsafe(),a=l?.sfDebug||!1;a&&console.log(`[FuncSpan] captureFunctionSpan wrapper called for ${n}::${e}`);const g=(function(m,h){const Z=r.getFuncspanOverride();if(Z){const b=r.parseHeaderOverride(Z);if(b)return process.env.SF_DEBUG==="true"&&console.log(`[FuncSpan] Using HTTP header override for ${m}::${h}`),b}try{return te(m,h)}catch{return{sample_rate:process.env.SF_FUNCSPAN_SAMPLE_RATE?parseFloat(process.env.SF_FUNCSPAN_SAMPLE_RATE):1,capture_arguments:!0,capture_return_value:!0,arg_limit_mb:1,return_limit_mb:1,enable_sampling:!1,autocapture_all_child_functions:!1,capture_sf_veritas:!1,parse_json_strings:!1}}})(n,e);if(a&&console.log(`[FuncSpan] Config for ${n}::${e}:`,g),g.enable_sampling&&g.sample_rate<1&&Math.random()>g.sample_rate)return a&&console.log(`[FuncSpan] Skipping ${e} due to sampling`),o.apply(this,s);if(g.sample_rate===0)return a&&console.log(`[FuncSpan] Skipping ${e} - sample_rate is 0.0`),o.apply(this,s);a&&console.log(`[FuncSpan] Capturing function span for ${e}`);const c=r.ContextManager.getInstance(),d=c.getCurrentFunctionSpanId(),I=r.v4();c.setCurrentFunctionSpanId(I);const p=process.hrtime.bigint(),C=Date.now();let u=null;g.capture_arguments&&(u={},i.paramNames.forEach((m,h)=>{h<s.length&&(u[m]=s[h])}),u&&g.arg_limit_mb>0&&(u=r.truncateToLimit(u,g.arg_limit_mb)));try{const m=o.apply(this,s);if(m&&typeof m.then=="function")return d?c.setCurrentFunctionSpanId(d):c.clearCurrentFunctionSpanId(),m.then(f=>{const v=process.hrtime.bigint(),J=Date.now(),K=Number(v-p);let x=null;return g.capture_return_value&&g.return_limit_mb>0&&(x=r.truncateToLimit(f,g.return_limit_mb)),H({functionName:e,filePath:n,metadata:i,args:u,result:x,error:null,duration:J-C,durationNs:K,startTimeNs:p.toString(),async:!0,spanId:I,parentSpanId:d,pid:process.pid,threadId:N.threadId}),f},f=>{const v=process.hrtime.bigint(),J=Date.now(),K=Number(v-p);throw H({functionName:e,filePath:n,metadata:i,args:u,result:null,error:f?.message||String(f),duration:J-C,durationNs:K,startTimeNs:p.toString(),async:!0,spanId:I,parentSpanId:d,pid:process.pid,threadId:N.threadId}),f});const h=process.hrtime.bigint(),Z=Date.now(),b=Number(h-p);let y=null;return g.capture_return_value&&g.return_limit_mb>0&&(y=r.truncateToLimit(m,g.return_limit_mb)),H({functionName:e,filePath:n,metadata:i,args:u,result:y,error:null,duration:Z-C,durationNs:b,startTimeNs:p.toString(),async:!1,spanId:I,parentSpanId:d,pid:process.pid,threadId:N.threadId}),d?c.setCurrentFunctionSpanId(d):c.clearCurrentFunctionSpanId(),m}catch(m){const h=process.hrtime.bigint(),Z=Date.now(),b=Number(h-p);throw H({functionName:e,filePath:n,metadata:i,args:u,result:null,error:m?.message||String(m),duration:Z-C,durationNs:b,startTimeNs:p.toString(),async:!1,spanId:I,parentSpanId:d,pid:process.pid,threadId:N.threadId}),d?c.setCurrentFunctionSpanId(d):c.clearCurrentFunctionSpanId(),m}};Object.defineProperty(t,"name",{value:e,writable:!1});for(const s in o)o.hasOwnProperty(s)&&(t[s]=o[s]);return t},exports.getGlobalConfig=te,exports.identify=function(o,e,n,i=!1){const t=r.getConfig();new O(t.apiKey).identify(o,e,n,i)},exports.initializeConfigLoader=ne,exports.initializeWorkerPoolPatching=ge,exports.isConfigLoaderInitialized=oe,exports.isWorkerPoolInitialized=le,exports.setupInterceptors=function(o){if(!o||!o.apiKey){const t=`The required API Key is not provided: ${JSON.stringify(o)}`;console.error(t)}const{config:e}=r.getOrCreateConfig(o);if(e.sfDebug&&console.log("Updated configuration after applying options:",e),!e.apiKey||!e.apiGraphqlEndpoint){const t=`The required config is not provided: ${JSON.stringify(e)}`;throw console.error(t),new Error(t)}oe()||ne(void 0,e.sfDebug).catch(t=>{e.sfDebug&&console.error("[FuncSpan] Failed to initialize config loader:",t)}),le()||(ge(),e.sfDebug&&console.log("[setupInterceptors] Worker pool patching initialized (DNS tracking enabled)"));const n=new P;n.setServiceUUID(e.serviceUUID),(function(t){function s(I,p){t.setOperationName("CollectLogs"),t.doSend([p,I])}const l=console.log.bind(console),a=console.error.bind(console),g=console.warn.bind(console),c=console.info.bind(console),d=console.debug.bind(console);console.log=(...I)=>{s("INFO",I.join(" ")),l(...I)},console.error=(...I)=>{s("ERROR",I.join(" ")),a(...I)},console.warn=(...I)=>{s("WARN",I.join(" ")),g(...I)},console.info=(...I)=>{s("INFO",I.join(" ")),c(...I)},r.getConfig().logLevel==="DEBUG"&&(console.debug=(...I)=>{s("DEBUG",I.join(" ")),d(...I)})})(n),(function(t=[]){const s=new Fe(t);new ve().doSend(s.getExcludedDomains());const l=new We,a=new Ne;s.patchFetch(l,a),s.patchHttp(l,a)})(e.domainsToNotPropagateHeadersTo);const i=new Se;i.setServiceUUID(e.serviceUUID),fe(i),Be(),new we().send()};
|