@sailfish-ai/sf-veritas 0.2.2 → 0.2.4
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/plugins/funcspanWebpackPlugin.cjs +1 -1
- package/dist/plugins/funcspanWebpackPlugin.mjs +19 -17
- package/dist/sf-veritas.cjs +51 -13
- package/dist/sf-veritas.mjs +682 -603
- package/dist/types/funcSpanConfigLoader.d.ts +1 -0
- package/dist/types/functionSpanTransmitter.d.ts +33 -0
- package/dist/types/setupConfig.d.ts +5 -0
- package/package.json +1 -1
package/dist/sf-veritas.mjs
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { AsyncLocalStorage as
|
|
5
|
-
import * as
|
|
6
|
-
import { readFileSync as
|
|
7
|
-
import { s as
|
|
8
|
-
import { Worker as
|
|
1
|
+
var Ge = Object.defineProperty;
|
|
2
|
+
var ve = (o, e, t) => e in o ? Ge(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
|
|
3
|
+
var C = (o, e, t) => ve(o, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import { AsyncLocalStorage as ie } from "async_hooks";
|
|
5
|
+
import * as k from "fs";
|
|
6
|
+
import { readFileSync as pe } from "fs";
|
|
7
|
+
import { s as he } from "./source-map-Cr6YkjTd.js";
|
|
8
|
+
import { Worker as Ne } from "worker_threads";
|
|
9
9
|
import * as v from "path";
|
|
10
|
-
import { glob as
|
|
11
|
-
const
|
|
12
|
-
for (let
|
|
13
|
-
let
|
|
14
|
-
const
|
|
15
|
-
function
|
|
16
|
-
if (
|
|
17
|
-
const
|
|
18
|
-
if (!
|
|
10
|
+
import { glob as Be } from "glob";
|
|
11
|
+
const Z = [];
|
|
12
|
+
for (let o = 0; o < 256; ++o) Z.push((o + 256).toString(16).slice(1));
|
|
13
|
+
let O;
|
|
14
|
+
const We = new Uint8Array(16), re = { randomUUID: typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto) };
|
|
15
|
+
function R(o, e, t) {
|
|
16
|
+
if (re.randomUUID && !o) return re.randomUUID();
|
|
17
|
+
const n = (o = o || {}).random ?? o.rng?.() ?? (function() {
|
|
18
|
+
if (!O) {
|
|
19
19
|
if (typeof crypto > "u" || !crypto.getRandomValues) throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
|
20
|
-
|
|
20
|
+
O = crypto.getRandomValues.bind(crypto);
|
|
21
21
|
}
|
|
22
|
-
return
|
|
22
|
+
return O(We);
|
|
23
23
|
})();
|
|
24
|
-
if (
|
|
25
|
-
return
|
|
26
|
-
return (
|
|
27
|
-
})(
|
|
24
|
+
if (n.length < 16) throw new Error("Random bytes length must be >= 16");
|
|
25
|
+
return n[6] = 15 & n[6] | 64, n[8] = 63 & n[8] | 128, (function(i, s = 0) {
|
|
26
|
+
return (Z[i[s + 0]] + Z[i[s + 1]] + Z[i[s + 2]] + Z[i[s + 3]] + "-" + Z[i[s + 4]] + Z[i[s + 5]] + "-" + Z[i[s + 6]] + Z[i[s + 7]] + "-" + Z[i[s + 8]] + Z[i[s + 9]] + "-" + Z[i[s + 10]] + Z[i[s + 11]] + Z[i[s + 12]] + Z[i[s + 13]] + Z[i[s + 14]] + Z[i[s + 15]]).toLowerCase();
|
|
27
|
+
})(n);
|
|
28
28
|
}
|
|
29
|
-
class
|
|
29
|
+
class Fe {
|
|
30
30
|
constructor(e) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this.apiKey = e.apiKey, this.apiGraphqlEndpoint = e?.apiGraphqlEndpoint || process.env.SAILFISH_GRAPHQL_ENDPOINT || "https://api-service.sailfishqa.com/graphql/", this.sfDebug = e?.debug === !0 || process.env.SF_DEBUG === "true", this.serviceIdentifier = e?.serviceIdentifier || process.env.SERVICE_IDENTIFIER, this.serviceUUID =
|
|
31
|
+
C(this, "apiKey");
|
|
32
|
+
C(this, "apiGraphqlEndpoint");
|
|
33
|
+
C(this, "sfDebug");
|
|
34
|
+
C(this, "serviceIdentifier");
|
|
35
|
+
C(this, "serviceVersion");
|
|
36
|
+
C(this, "serviceUUID");
|
|
37
|
+
C(this, "serviceAdditionalMetadata");
|
|
38
|
+
C(this, "profilingModeEnabled");
|
|
39
|
+
C(this, "profilingMaxDepth");
|
|
40
|
+
C(this, "profilingMaxVariableSizeKb");
|
|
41
|
+
C(this, "domainsToNotPropagateHeadersTo");
|
|
42
|
+
C(this, "nodeModulesToCollectLocalVariablesOn");
|
|
43
|
+
C(this, "printConfigurationStatuses");
|
|
44
|
+
C(this, "logLevel");
|
|
45
|
+
C(this, "stackDepthLocals");
|
|
46
|
+
C(this, "stackDepthCodeTraceDepth");
|
|
47
|
+
C(this, "packageLibraryType");
|
|
48
|
+
C(this, "version");
|
|
49
|
+
C(this, "gitSha");
|
|
50
|
+
C(this, "_serviceIdentificationReceived", !1);
|
|
51
|
+
this.apiKey = e.apiKey, this.apiGraphqlEndpoint = e?.apiGraphqlEndpoint || process.env.SAILFISH_GRAPHQL_ENDPOINT || "https://api-service.sailfishqa.com/graphql/", this.sfDebug = e?.debug === !0 || process.env.SF_DEBUG === "true", this.serviceIdentifier = e?.serviceIdentifier || process.env.SERVICE_IDENTIFIER, this.serviceUUID = R(), this.serviceVersion = e?.serviceVersion || process.env.SERVICE_VERSION, this.gitSha = e?.gitSha || process.env.GIT_SHA || process.env.VERCEL_GIT_COMMIT_SHA, this.serviceAdditionalMetadata = e?.serviceAdditionalMetadata || {}, this.profilingModeEnabled = e?.profilingModeEnabled ?? !1, this.profilingMaxDepth = e?.profilingMaxDepth ?? 5, this.profilingMaxVariableSizeKb = e?.profilingMaxVariableSizeKb ?? 25, this.domainsToNotPropagateHeadersTo = e?.domainsToNotPropagateHeadersTo || [], this.nodeModulesToCollectLocalVariablesOn = e?.nodeModulesToCollectLocalVariablesOn || ["_all_"], this.printConfigurationStatuses = process.env.PRINT_CONFIGURATION_STATUSES || "true", this.logLevel = process.env.LOG_LEVEL || "INFO", this.stackDepthLocals = process.env.SAILFISH_EXCEPTION_STACK_DEPTH_LOCALS !== void 0 ? parseInt(process.env.SAILFISH_EXCEPTION_STACK_DEPTH_LOCALS, 10) : 5, isNaN(this.stackDepthLocals) && (this.stackDepthLocals = -1), this.stackDepthCodeTraceDepth = process.env.SAILFISH_EXCEPTION_STACK_DEPTH_CODE_TRACE_DEPTH !== void 0 ? parseInt(process.env.SAILFISH_EXCEPTION_STACK_DEPTH_CODE_TRACE_DEPTH, 10) : -1, isNaN(this.stackDepthCodeTraceDepth) && (this.stackDepthCodeTraceDepth = -1), this.packageLibraryType = "JS/TS BACKEND", this.version = this.getPackageVersion();
|
|
52
52
|
}
|
|
53
53
|
getPackageVersion() {
|
|
54
54
|
return "0.1.15";
|
|
@@ -60,64 +60,64 @@ class ve {
|
|
|
60
60
|
this._serviceIdentificationReceived = e;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
const
|
|
64
|
-
function
|
|
65
|
-
return globalThis[
|
|
63
|
+
const me = Symbol.for("sailfish.sf_config");
|
|
64
|
+
function z() {
|
|
65
|
+
return globalThis[me];
|
|
66
66
|
}
|
|
67
|
-
function
|
|
68
|
-
const e =
|
|
67
|
+
function Ve(o) {
|
|
68
|
+
const e = z();
|
|
69
69
|
if (e) return { config: e };
|
|
70
|
-
const t = new
|
|
71
|
-
return (function(
|
|
72
|
-
globalThis[
|
|
70
|
+
const t = new Fe(o);
|
|
71
|
+
return (function(n) {
|
|
72
|
+
globalThis[me] = n;
|
|
73
73
|
})(t), t.sfDebug && console.log("[[getOrCreateConfig]] Created global config:", t), { config: t };
|
|
74
74
|
}
|
|
75
75
|
function l() {
|
|
76
|
-
const
|
|
77
|
-
if (!
|
|
78
|
-
return
|
|
76
|
+
const o = z();
|
|
77
|
+
if (!o) throw new Error("Configuration has not been initialized. Call getOrCreateConfig(options) first.");
|
|
78
|
+
return o;
|
|
79
79
|
}
|
|
80
|
-
const
|
|
80
|
+
const ae = Symbol.for("sf.ctx.storeAls"), W = globalThis, P = W[ae] ?? (W[ae] = new ie()), Ae = ["identitytoolkit.googleapis.com", "t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com"], ce = Symbol.for("sf.ctx.als"), K = W[ce] ?? (W[ce] = new ie()), ge = Symbol.for("sf.ctx.sessionRegistry"), Y = W[ge] ?? (W[ge] = /* @__PURE__ */ new Map()), E = { handledExceptions: /* @__PURE__ */ new Set(), reentrancyGuardLoggingActive: !1, reentrancyGuardLoggingPreActive: !1, reentrancyGuardPrintActive: !1, reentrancyGuardPrintPreActive: !1, reentrancyGuardExceptionActive: !1, reentrancyGuardExceptionPreActive: !1, excludedDomains: new Set(Ae), supportedDomains: /* @__PURE__ */ new Set() }, V = class V {
|
|
81
81
|
constructor() {
|
|
82
82
|
}
|
|
83
83
|
current() {
|
|
84
|
-
return
|
|
84
|
+
return P.getStore();
|
|
85
85
|
}
|
|
86
86
|
ensureStore() {
|
|
87
87
|
const e = this.current();
|
|
88
88
|
if (e) return e;
|
|
89
89
|
const t = /* @__PURE__ */ new Map();
|
|
90
|
-
return
|
|
90
|
+
return P.enterWith(t), t;
|
|
91
91
|
}
|
|
92
92
|
runWith(e, t) {
|
|
93
|
-
const
|
|
94
|
-
for (const [
|
|
95
|
-
return
|
|
93
|
+
const n = this.current() ?? /* @__PURE__ */ new Map(), i = new Map(n);
|
|
94
|
+
for (const [s, g] of Object.entries(e)) i.set(s, g);
|
|
95
|
+
return P.run(i, t);
|
|
96
96
|
}
|
|
97
97
|
static getInstance() {
|
|
98
98
|
return W[V.GLOBAL_MANAGER_SYMBOL] || (W[V.GLOBAL_MANAGER_SYMBOL] = new V()), W[V.GLOBAL_MANAGER_SYMBOL];
|
|
99
99
|
}
|
|
100
100
|
getCurrentContext() {
|
|
101
|
-
return
|
|
101
|
+
return K.getStore() || E;
|
|
102
102
|
}
|
|
103
103
|
setCurrentContext(e) {
|
|
104
|
-
const t =
|
|
105
|
-
|
|
104
|
+
const t = K.getStore() || E;
|
|
105
|
+
K.enterWith({ ...t, ...e });
|
|
106
106
|
}
|
|
107
107
|
ensureSession(e) {
|
|
108
108
|
let t = Y.get(e);
|
|
109
|
-
return t || (t = { ...
|
|
109
|
+
return t || (t = { ...E }, Y.set(e, t)), t;
|
|
110
110
|
}
|
|
111
111
|
getContextFor(e) {
|
|
112
|
-
return Y.get(e) ??
|
|
112
|
+
return Y.get(e) ?? E;
|
|
113
113
|
}
|
|
114
114
|
updateContextFor(e, t) {
|
|
115
|
-
const
|
|
116
|
-
Y.set(e, { ...
|
|
115
|
+
const n = this.ensureSession(e);
|
|
116
|
+
Y.set(e, { ...n, ...t });
|
|
117
117
|
}
|
|
118
118
|
runWithSession(e, t) {
|
|
119
|
-
const
|
|
120
|
-
return
|
|
119
|
+
const n = { ...this.ensureSession(e) };
|
|
120
|
+
return K.run(n, t);
|
|
121
121
|
}
|
|
122
122
|
deleteSession(e) {
|
|
123
123
|
Y.delete(e);
|
|
@@ -144,12 +144,12 @@ const se = Symbol.for("sf.ctx.storeAls"), W = globalThis, O = W[se] ?? (W[se] =
|
|
|
144
144
|
this.setCurrentContext({ currentFunctionSpanId: void 0 });
|
|
145
145
|
}
|
|
146
146
|
getOrSetSfTraceId(e, t = !1) {
|
|
147
|
-
let
|
|
148
|
-
return
|
|
147
|
+
let n = this.getTraceId();
|
|
148
|
+
return n || (n = e || (t ? R() : `nonsession-applogs-v3/${l().apiKey}/${R()}`), this.setTraceId(n), l().sfDebug && console.log(" Created new trace ID:", n), n);
|
|
149
149
|
}
|
|
150
150
|
getOrSetPageVisitUUID() {
|
|
151
151
|
let e = this.getPageVisitUUID();
|
|
152
|
-
return e || (e =
|
|
152
|
+
return e || (e = R(), this.setPageVisitUUID(e), l().sfDebug && console.log(" Created new page visit UUID:", e), e);
|
|
153
153
|
}
|
|
154
154
|
getHandledExceptions() {
|
|
155
155
|
return this.getCurrentContext().handledExceptions;
|
|
@@ -180,33 +180,33 @@ const se = Symbol.for("sf.ctx.storeAls"), W = globalThis, O = W[se] ?? (W[se] =
|
|
|
180
180
|
this.updateContextFor(e, { pageVisitUUID: t });
|
|
181
181
|
}
|
|
182
182
|
};
|
|
183
|
-
|
|
183
|
+
C(V, "GLOBAL_MANAGER_SYMBOL", Symbol.for("sf.ctx.manager"));
|
|
184
184
|
let G = V;
|
|
185
|
-
function
|
|
185
|
+
function it(o) {
|
|
186
186
|
const e = { ...G.getInstance().getCurrentContext() };
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
K.run(e, () => {
|
|
188
|
+
o();
|
|
189
189
|
});
|
|
190
190
|
}
|
|
191
|
-
function
|
|
191
|
+
function M() {
|
|
192
192
|
return G.getInstance().getCurrentFunctionSpanId();
|
|
193
193
|
}
|
|
194
|
-
class
|
|
194
|
+
class w {
|
|
195
195
|
constructor() {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
196
|
+
C(this, "apiKey");
|
|
197
|
+
C(this, "endpoint");
|
|
198
|
+
C(this, "queryType", "mutation");
|
|
199
|
+
C(this, "operationName", "");
|
|
200
|
+
C(this, "serviceUUID", l().serviceUUID);
|
|
201
|
+
C(this, "contextManager");
|
|
202
202
|
this.apiKey = l().apiKey, this.endpoint = l().apiGraphqlEndpoint, this.contextManager = G.getInstance();
|
|
203
203
|
}
|
|
204
204
|
get queryName() {
|
|
205
205
|
return this.operationName ? this.operationName.charAt(0).toLowerCase() + this.operationName.slice(1) : "";
|
|
206
206
|
}
|
|
207
207
|
getDefaultVariables() {
|
|
208
|
-
const e = Date.now().toString(), t = this.contextManager.getOrSetSfTraceId(),
|
|
209
|
-
return { apiKey: this.apiKey, serviceUuid: this.serviceUUID, sessionId: t, timestampMs: e, parentSpanId:
|
|
208
|
+
const e = Date.now().toString(), t = this.contextManager.getOrSetSfTraceId(), n = this.contextManager.getCurrentFunctionSpanId();
|
|
209
|
+
return { apiKey: this.apiKey, serviceUuid: this.serviceUUID, sessionId: t, timestampMs: e, parentSpanId: n };
|
|
210
210
|
}
|
|
211
211
|
getVariables(e = {}) {
|
|
212
212
|
return { ...this.getDefaultVariables(), ...e };
|
|
@@ -221,34 +221,34 @@ class R {
|
|
|
221
221
|
this.serviceUUID = e;
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
-
const
|
|
225
|
-
async function F(
|
|
224
|
+
const we = fetch;
|
|
225
|
+
async function F(o, e, t, n) {
|
|
226
226
|
try {
|
|
227
|
-
const
|
|
228
|
-
let
|
|
227
|
+
const i = l();
|
|
228
|
+
let s;
|
|
229
229
|
try {
|
|
230
|
-
|
|
230
|
+
s = JSON.stringify({ query: t, variables: n, operationName: e });
|
|
231
231
|
} catch {
|
|
232
|
-
|
|
232
|
+
s = JSON.stringify({ query: t, operationName: e });
|
|
233
233
|
}
|
|
234
|
-
|
|
235
|
-
if (!
|
|
236
|
-
const r = await
|
|
237
|
-
r.errors?.length ? (function(
|
|
238
|
-
const
|
|
239
|
-
console.error(
|
|
240
|
-
})(r.data, r.errors,
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
})(r.data, 0,
|
|
244
|
-
}).catch((
|
|
245
|
-
|
|
234
|
+
we(o, { method: "POST", headers: { "Content-Type": "application/json" }, body: s }).then(async (g) => {
|
|
235
|
+
if (!g.ok) return void (i.sfDebug && console.error(`GraphQL request failed with status ${g.status} for ${e}`));
|
|
236
|
+
const r = await g.json();
|
|
237
|
+
r.errors?.length ? (function(a, c, d) {
|
|
238
|
+
const I = a && typeof a == "object" && !Array.isArray(a) ? Object.keys(a)[0] : void 0;
|
|
239
|
+
console.error(I === "identifyServiceDetails" ? `IdentifyServiceDetails NOT sent successfully for service: UUID=${d.serviceUUID}` : `GraphQL request failed with errors: ${JSON.stringify(c)} for operation key ${I}`);
|
|
240
|
+
})(r.data, r.errors, i) : i.sfDebug && (function(a, c, d) {
|
|
241
|
+
const I = a && typeof a == "object" && !Array.isArray(a) ? Object.keys(a)[0] : void 0, h = a[I] || !1;
|
|
242
|
+
I === "identifyServiceDetails" && (d.setServiceIdentificationReceived(h), l().sfDebug && console.log(`IdentifyServiceDetails sent successfully for service: UUID=${d.serviceUUID}; serviceIdentificationReceived=${I === "identifyServiceDetails" ? h : "N/A"}`));
|
|
243
|
+
})(r.data, 0, i);
|
|
244
|
+
}).catch((g) => {
|
|
245
|
+
i.sfDebug && (console.error(`[RequestUtils] Fetch error for ${e} to ${o}:`, g), g.cause && console.error("[RequestUtils] Error cause:", g.cause));
|
|
246
246
|
});
|
|
247
|
-
} catch (
|
|
248
|
-
l().sfDebug && console.error("Error sending data to GraphQL server:",
|
|
247
|
+
} catch (i) {
|
|
248
|
+
l().sfDebug && console.error("Error sending data to GraphQL server:", i);
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
|
-
class
|
|
251
|
+
class X extends w {
|
|
252
252
|
constructor() {
|
|
253
253
|
super(), this.setOperationName("IdentifyServiceDetails");
|
|
254
254
|
}
|
|
@@ -288,37 +288,37 @@ class T extends R {
|
|
|
288
288
|
F(this.endpoint, this.operationName, e, t);
|
|
289
289
|
}
|
|
290
290
|
}
|
|
291
|
-
function
|
|
291
|
+
function He(o) {
|
|
292
292
|
try {
|
|
293
|
-
return JSON.stringify(
|
|
293
|
+
return JSON.stringify(o), !0;
|
|
294
294
|
} catch {
|
|
295
295
|
return !1;
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
|
-
class
|
|
298
|
+
class Re extends w {
|
|
299
299
|
constructor() {
|
|
300
300
|
super();
|
|
301
|
-
|
|
301
|
+
C(this, "serviceIdentifier", new X());
|
|
302
302
|
this.setOperationName("CollectMetadata");
|
|
303
303
|
}
|
|
304
304
|
async sendAppIdentifier() {
|
|
305
305
|
this.serviceIdentifier.doSend({});
|
|
306
306
|
}
|
|
307
|
-
async doSend(t,
|
|
308
|
-
this.sendAppIdentifier(), this.send(t,
|
|
309
|
-
}
|
|
310
|
-
async send(t,
|
|
311
|
-
if (!
|
|
312
|
-
let
|
|
313
|
-
if (!
|
|
314
|
-
const
|
|
315
|
-
const
|
|
316
|
-
if (c) for (const [
|
|
317
|
-
return { traitsJson: JSON.stringify(
|
|
318
|
-
})(
|
|
319
|
-
|
|
307
|
+
async doSend(t, n, i, s) {
|
|
308
|
+
this.sendAppIdentifier(), this.send(t, n, i, s);
|
|
309
|
+
}
|
|
310
|
+
async send(t, n, i, s) {
|
|
311
|
+
if (!n && !s) throw new Error('Must pass in either traits or traits_json to "add_or_update_traits"');
|
|
312
|
+
let g = [];
|
|
313
|
+
if (!s) {
|
|
314
|
+
const a = (function(c) {
|
|
315
|
+
const d = {}, I = [];
|
|
316
|
+
if (c) for (const [h, p] of Object.entries(c)) He(p) ? d[h] = p : I.push(h);
|
|
317
|
+
return { traitsJson: JSON.stringify(d), excludedFields: I };
|
|
318
|
+
})(n);
|
|
319
|
+
s = a.traitsJson, g = a.excludedFields;
|
|
320
320
|
}
|
|
321
|
-
const r = this.getVariables({ userId: t, traitsJson:
|
|
321
|
+
const r = this.getVariables({ userId: t, traitsJson: s, excludedFields: g, override: i, library: l().packageLibraryType, version: l().version });
|
|
322
322
|
F(this.endpoint, this.operationName, this.getQuery(), r);
|
|
323
323
|
}
|
|
324
324
|
getQuery() {
|
|
@@ -329,23 +329,23 @@ class Ve extends R {
|
|
|
329
329
|
`;
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
|
-
class
|
|
332
|
+
class be {
|
|
333
333
|
constructor(e) {
|
|
334
|
-
|
|
335
|
-
this.apiKey = e, this.metadataTransmitter = new
|
|
334
|
+
C(this, "metadataTransmitter");
|
|
335
|
+
this.apiKey = e, this.metadataTransmitter = new Re();
|
|
336
336
|
}
|
|
337
|
-
identify(e, t,
|
|
338
|
-
t ||
|
|
337
|
+
identify(e, t, n, i = !1) {
|
|
338
|
+
t || n ? this.addOrUpdateMetadata(e, t, n, i) : this.addOrUpdateMetadata(e, {}, void 0, i);
|
|
339
339
|
}
|
|
340
|
-
addOrUpdateMetadata(e, t = {},
|
|
341
|
-
if (!t && !
|
|
342
|
-
l().sfDebug && console.log(" [[DEBUG - addOrUpdateMetadata]] Starting operation"), l().sfDebug && console.log(" addOrUpdateMetadata...SENDING DATA...", e, t,
|
|
340
|
+
addOrUpdateMetadata(e, t = {}, n, i = !1) {
|
|
341
|
+
if (!t && !n) throw new Error('Must pass in either traits or traitsJson to "addOrUpdateMetadata"');
|
|
342
|
+
l().sfDebug && console.log(" [[DEBUG - addOrUpdateMetadata]] Starting operation"), l().sfDebug && console.log(" addOrUpdateMetadata...SENDING DATA...", e, t, n), this.metadataTransmitter.doSend(e, t, i, n);
|
|
343
343
|
}
|
|
344
344
|
}
|
|
345
|
-
class
|
|
345
|
+
class oe extends w {
|
|
346
346
|
constructor() {
|
|
347
347
|
super();
|
|
348
|
-
|
|
348
|
+
C(this, "serviceIdentifier", new X());
|
|
349
349
|
}
|
|
350
350
|
async sendAppIdentifier() {
|
|
351
351
|
this.serviceIdentifier.doSend({});
|
|
@@ -355,10 +355,10 @@ class ne extends R {
|
|
|
355
355
|
}
|
|
356
356
|
async send(t) {
|
|
357
357
|
try {
|
|
358
|
-
const
|
|
359
|
-
F(this.endpoint, this.operationName, this.getQuery(),
|
|
360
|
-
} catch (
|
|
361
|
-
l().sfDebug && console.error("🚨 Error in send():",
|
|
358
|
+
const n = Array.isArray(t) ? t : [t, "default"], i = this.getVariables({ contents: n[0], level: n[1] });
|
|
359
|
+
F(this.endpoint, this.operationName, this.getQuery(), i);
|
|
360
|
+
} catch (n) {
|
|
361
|
+
l().sfDebug && console.error("🚨 Error in send():", n);
|
|
362
362
|
}
|
|
363
363
|
}
|
|
364
364
|
getQuery() {
|
|
@@ -385,121 +385,121 @@ class ne extends R {
|
|
|
385
385
|
`;
|
|
386
386
|
}
|
|
387
387
|
}
|
|
388
|
-
const
|
|
389
|
-
class
|
|
390
|
-
constructor({ file: e, line: t, function:
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
this.file = e, this.line = t, this.function =
|
|
388
|
+
const N = {};
|
|
389
|
+
class T {
|
|
390
|
+
constructor({ file: e, line: t, function: n, code: i, locals: s = {}, offender: g = !1, column: r }) {
|
|
391
|
+
C(this, "file");
|
|
392
|
+
C(this, "line");
|
|
393
|
+
C(this, "function");
|
|
394
|
+
C(this, "code");
|
|
395
|
+
C(this, "locals");
|
|
396
|
+
C(this, "offender");
|
|
397
|
+
C(this, "column");
|
|
398
|
+
this.file = e, this.line = t, this.function = n, this.code = i, this.locals = s, this.offender = g, this.column = r;
|
|
399
399
|
}
|
|
400
400
|
toDict() {
|
|
401
|
-
const e = { file: this.file, line: this.line, function: this.function, code: this.code, locals: Object.fromEntries(Object.entries(this.locals).map(([t,
|
|
401
|
+
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)])) };
|
|
402
402
|
return this.offender && (e.offender = this.offender), this.column !== void 0 && (e.column = this.column), e;
|
|
403
403
|
}
|
|
404
404
|
toJson() {
|
|
405
405
|
return JSON.stringify(this.toDict());
|
|
406
406
|
}
|
|
407
407
|
}
|
|
408
|
-
class
|
|
408
|
+
class L {
|
|
409
409
|
static encode(e) {
|
|
410
|
-
return e instanceof
|
|
410
|
+
return e instanceof T ? e.toDict() : Array.isArray(e) ? e.map((t) => L.encode(t)) : typeof e == "object" && e !== null ? JSON.stringify(e) : e;
|
|
411
411
|
}
|
|
412
412
|
static stringify(e) {
|
|
413
|
-
return JSON.stringify(
|
|
413
|
+
return JSON.stringify(L.encode(e), (t, n) => n instanceof T ? n.toDict() : n);
|
|
414
414
|
}
|
|
415
415
|
}
|
|
416
|
-
let
|
|
417
|
-
function
|
|
416
|
+
let B, U = 0;
|
|
417
|
+
function Ye(o) {
|
|
418
418
|
l().sfDebug && console.log("Initializing Exception Interceptor...");
|
|
419
419
|
try {
|
|
420
420
|
const r = (function() {
|
|
421
|
-
if (
|
|
422
|
-
const
|
|
423
|
-
if (c !== void 0) return
|
|
424
|
-
const
|
|
425
|
-
if (["local", "dev", "development"].includes(
|
|
426
|
-
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((
|
|
427
|
-
const
|
|
428
|
-
return
|
|
421
|
+
if (B !== void 0) return B;
|
|
422
|
+
const a = process.env || {}, c = Ie(a.SF_IS_LOCAL);
|
|
423
|
+
if (c !== void 0) return B = c;
|
|
424
|
+
const d = (a.SF_ENV || a.NODE_ENV || "").toLowerCase();
|
|
425
|
+
if (["local", "dev", "development"].includes(d)) return B = !0;
|
|
426
|
+
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;
|
|
427
|
+
const I = (N.hostname?.() || a.HOSTNAME || "").toLowerCase();
|
|
428
|
+
return I === "localhost" || I.endsWith(".local") || I.includes("local") ? B = !0 : B = !1;
|
|
429
429
|
})();
|
|
430
|
-
|
|
431
|
-
if (
|
|
432
|
-
|
|
430
|
+
o?.setSupplementalFields?.({ isFromLocalService: r }), (async function(a) {
|
|
431
|
+
if (de) return;
|
|
432
|
+
de = !0;
|
|
433
433
|
const c = process.env || {};
|
|
434
|
-
if (
|
|
434
|
+
if (Ie(c.SF_IS_LOCAL) === void 0)
|
|
435
435
|
try {
|
|
436
|
-
await (async function(
|
|
437
|
-
const
|
|
438
|
-
return (await Promise.allSettled([
|
|
439
|
-
})(150) &&
|
|
436
|
+
await (async function(d) {
|
|
437
|
+
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);
|
|
438
|
+
return (await Promise.allSettled([I, h, p])).some((u) => u.status === "fulfilled" && (u.value === "ok" || u.value === "http_error"));
|
|
439
|
+
})(150) && B && (B = !1, a?.setSupplementalFields?.({ isFromLocalService: !1 }));
|
|
440
440
|
} catch {
|
|
441
441
|
}
|
|
442
|
-
})(
|
|
442
|
+
})(o).catch(() => {
|
|
443
443
|
});
|
|
444
444
|
} catch {
|
|
445
445
|
}
|
|
446
|
-
const e = new Se(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 } });
|
|
446
|
+
const e = new Ne(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 } });
|
|
447
447
|
let t = null;
|
|
448
|
-
const
|
|
448
|
+
const n = /* @__PURE__ */ new WeakMap();
|
|
449
449
|
e.on("message", (r) => {
|
|
450
450
|
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") {
|
|
451
|
-
const { frames:
|
|
451
|
+
const { frames: a } = r, c = t;
|
|
452
452
|
if (!c) return;
|
|
453
|
-
const
|
|
453
|
+
const d = n.get(c), I = (function(p) {
|
|
454
454
|
return p ? p.split(`
|
|
455
|
-
`).slice(1).map((
|
|
456
|
-
const
|
|
457
|
-
if (
|
|
458
|
-
const [,
|
|
459
|
-
return new
|
|
455
|
+
`).slice(1).map((u) => {
|
|
456
|
+
const m = /at (.+?) \((.+):(\d+):(\d+)\)/.exec(u) || /at (.+):(\d+):(\d+)/.exec(u);
|
|
457
|
+
if (m) {
|
|
458
|
+
const [, A, y, b, f] = m;
|
|
459
|
+
return new T({ function: A || "<anonymous>", locals: {}, file: y || "<unknown>", line: parseInt(b, 10) || 0, code: "<not captured>", column: parseInt(f) || 0 });
|
|
460
460
|
}
|
|
461
|
-
return new
|
|
461
|
+
return new T({ function: "<unknown>", locals: {}, file: "<unknown>", line: 0, code: "<not captured>", column: 0 });
|
|
462
462
|
}) : [];
|
|
463
|
-
})(c.stack),
|
|
464
|
-
const
|
|
465
|
-
let
|
|
466
|
-
for (let
|
|
467
|
-
const
|
|
468
|
-
if (
|
|
469
|
-
for (let
|
|
470
|
-
const x =
|
|
471
|
-
if (
|
|
472
|
-
|
|
463
|
+
})(c.stack), h = (function(p, u) {
|
|
464
|
+
const m = [];
|
|
465
|
+
let A = -1, y = -1;
|
|
466
|
+
for (let b = 0; b < p.length; b++) {
|
|
467
|
+
const f = Ke(p[b].file);
|
|
468
|
+
if (y = b, f !== "<unknown>") {
|
|
469
|
+
for (let S = 0; S < u.length; S++) {
|
|
470
|
+
const x = u[S];
|
|
471
|
+
if (fe(x, f) || typeof x.file == "string" && x.file.includes(f)) {
|
|
472
|
+
A = S, U = 0, l().sfDebug && console.log(`✅ Matched Frame Found: ${f} @ Debugger Frame ${S}`);
|
|
473
473
|
break;
|
|
474
474
|
}
|
|
475
475
|
}
|
|
476
|
-
if (
|
|
476
|
+
if (A !== -1) break;
|
|
477
477
|
}
|
|
478
478
|
}
|
|
479
|
-
if (
|
|
480
|
-
l().sfDebug && console.log(`🔄 Merging from matched index ${
|
|
481
|
-
for (let
|
|
482
|
-
const
|
|
483
|
-
|
|
479
|
+
if (A === -1) return U === 10 ? (U = 0, p) : (++U, l().sfDebug && console.log(`"❌ No matching frame found. Checking once again, Attempt N ${U}"`), []);
|
|
480
|
+
l().sfDebug && console.log(`🔄 Merging from matched index ${A} onward...`);
|
|
481
|
+
for (let b = 0; b < u.length; b++) {
|
|
482
|
+
const f = p[y + b], S = u[A + b];
|
|
483
|
+
m.push(new T({ function: S?.function || f?.function || "<anonymous>", locals: S?.locals || f?.locals || {}, file: f?.file || S?.file || "<unknown>", line: S?.line || f?.line || 0, code: S?.code || f?.code || "<not captured>" }));
|
|
484
484
|
}
|
|
485
|
-
return
|
|
486
|
-
})(
|
|
487
|
-
if (
|
|
485
|
+
return m;
|
|
486
|
+
})(I, a || []);
|
|
487
|
+
if (h.length !== 0) {
|
|
488
488
|
t = null;
|
|
489
|
-
const p = l().stackDepthCodeTraceDepth,
|
|
490
|
-
for (let
|
|
491
|
-
const
|
|
492
|
-
|
|
489
|
+
const p = l().stackDepthCodeTraceDepth, u = p === -1 ? h : h.slice(0, p + 1), m = Math.min(u.length, I.length);
|
|
490
|
+
for (let f = 0; f < m; f++) (async () => {
|
|
491
|
+
const S = Ue(u[f].file, I[f].line, I[f].column);
|
|
492
|
+
S && (S.content != null && (u[f].code = S.content), S.file != null && (u[f].file = S.file));
|
|
493
493
|
})();
|
|
494
|
-
|
|
495
|
-
const
|
|
496
|
-
l().sfDebug && console.log("error message is : ",
|
|
497
|
-
const
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
})) :
|
|
501
|
-
|
|
502
|
-
}) :
|
|
494
|
+
o.setOperationName("CollectExceptions");
|
|
495
|
+
const A = c.message ? `${c.name}: ${c.message}` : c.name;
|
|
496
|
+
l().sfDebug && console.log("error message is : ", A);
|
|
497
|
+
const y = G.getInstance(), b = n.get(c);
|
|
498
|
+
b ? (y.setTraceIdFor(b, b), y.runWithSession(b, () => {
|
|
499
|
+
y.setTraceId(b), o.doSend(A, u);
|
|
500
|
+
})) : o.doSend(A, u), d ? G.getInstance().runWithSession(d, () => {
|
|
501
|
+
o.doSend(A, u);
|
|
502
|
+
}) : o.doSend(A, u);
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
505
|
}), e.on("error", (r) => {
|
|
@@ -507,115 +507,115 @@ function we(s) {
|
|
|
507
507
|
}), e.on("exit", (r) => {
|
|
508
508
|
console.error(`[Worker] Exited with code ${r}`);
|
|
509
509
|
}), e.unref();
|
|
510
|
-
const
|
|
511
|
-
function
|
|
512
|
-
const
|
|
513
|
-
Reflect.setPrototypeOf(
|
|
510
|
+
const i = Error, s = /* @__PURE__ */ new Set();
|
|
511
|
+
function g(...r) {
|
|
512
|
+
const a = Reflect.construct(i, r);
|
|
513
|
+
Reflect.setPrototypeOf(a, g.prototype);
|
|
514
514
|
try {
|
|
515
|
-
const
|
|
516
|
-
|
|
515
|
+
const d = G.getInstance().getTraceId();
|
|
516
|
+
n.set(a, d);
|
|
517
517
|
} catch {
|
|
518
518
|
}
|
|
519
|
-
|
|
520
|
-
const c = `${
|
|
519
|
+
i.captureStackTrace && i.captureStackTrace(a, g);
|
|
520
|
+
const c = `${a.message}:${a.stack?.split(`
|
|
521
521
|
`)[1]?.trim()}`;
|
|
522
|
-
if (!
|
|
523
|
-
|
|
524
|
-
const
|
|
525
|
-
|
|
522
|
+
if (!s.has(c)) {
|
|
523
|
+
s.add(c), t = a;
|
|
524
|
+
const d = G.getInstance().getTraceId();
|
|
525
|
+
n.set(a, d), e.postMessage({ type: "processException", error: a.message });
|
|
526
526
|
}
|
|
527
|
-
return
|
|
527
|
+
return a;
|
|
528
528
|
}
|
|
529
|
-
|
|
529
|
+
g.prototype = Object.create(i.prototype, { constructor: { value: g, enumerable: !1, writable: !0, configurable: !0 } }), Object.setPrototypeOf(g, i), globalThis.Error = g;
|
|
530
530
|
}
|
|
531
|
-
function
|
|
532
|
-
return
|
|
531
|
+
function le(o) {
|
|
532
|
+
return o = (o = (o = o.replace(/^webpack:\/\/[^\/]+\/\.?\//, "")).replace(/^.*\/pages\//, "pages/")).replace(/\.(js|ts)$/, "");
|
|
533
533
|
}
|
|
534
|
-
function
|
|
535
|
-
const
|
|
536
|
-
|
|
537
|
-
const
|
|
538
|
-
return
|
|
539
|
-
})(
|
|
540
|
-
if (!
|
|
541
|
-
const
|
|
534
|
+
function Ue(o, e, t) {
|
|
535
|
+
const n = (function(s) {
|
|
536
|
+
s.startsWith("at ") && (s = s.slice(3).trim());
|
|
537
|
+
const g = s.match(/^(.*?)(:\d+)+(\.map)?$/);
|
|
538
|
+
return g ? g[1] : s;
|
|
539
|
+
})(o);
|
|
540
|
+
if (!n || n === "<unknown>") return null;
|
|
541
|
+
const i = n + ".map";
|
|
542
542
|
try {
|
|
543
|
-
const
|
|
544
|
-
if (
|
|
545
|
-
const
|
|
546
|
-
let r = new
|
|
547
|
-
if (
|
|
548
|
-
const
|
|
549
|
-
if (c === -1) l().sfDebug && console.log(`Source file "${
|
|
543
|
+
const s = pe(i, "utf-8");
|
|
544
|
+
if (s) {
|
|
545
|
+
const g = JSON.parse(s);
|
|
546
|
+
let r = new he.SourceMapConsumer(g).originalPositionFor({ line: e, column: t });
|
|
547
|
+
if (n && r.source) {
|
|
548
|
+
const a = le(n), c = g.sources.findIndex((d) => le(d) === a);
|
|
549
|
+
if (c === -1) l().sfDebug && console.log(`Source file "${n}" not found in the source map.`);
|
|
550
550
|
else {
|
|
551
|
-
const
|
|
552
|
-
if (
|
|
553
|
-
return { content:
|
|
551
|
+
const d = g.sourcesContent[c], I = g.names.join(",");
|
|
552
|
+
if (d)
|
|
553
|
+
return { content: d.split(`
|
|
554
554
|
`).slice(r.line - 1, r.line + 20).join(`
|
|
555
|
-
`), name:
|
|
556
|
-
l().sfDebug && console.log(`No source content available for file "${
|
|
555
|
+
`), name: I, file: r.source };
|
|
556
|
+
l().sfDebug && console.log(`No source content available for file "${n}".`);
|
|
557
557
|
}
|
|
558
558
|
}
|
|
559
|
-
return { content:
|
|
559
|
+
return { content: g.sourcesContent[0], name: g.names[0], file: g.file };
|
|
560
560
|
}
|
|
561
|
-
} catch (
|
|
562
|
-
l().sfDebug && console.log(`Cant read/parse "${
|
|
561
|
+
} catch (s) {
|
|
562
|
+
l().sfDebug && console.log(`Cant read/parse "${i}: Error - ".`, s);
|
|
563
563
|
}
|
|
564
564
|
return null;
|
|
565
565
|
}
|
|
566
|
-
function
|
|
567
|
-
return
|
|
566
|
+
function Ke(o) {
|
|
567
|
+
return o?.split("/").pop() || "<unknown>";
|
|
568
568
|
}
|
|
569
|
-
function
|
|
570
|
-
if (!
|
|
571
|
-
for (const t of Object.values(
|
|
572
|
-
if (typeof t == "string" && t.includes(e) || typeof t == "object" &&
|
|
569
|
+
function fe(o, e) {
|
|
570
|
+
if (!o || typeof o != "object") return !1;
|
|
571
|
+
for (const t of Object.values(o))
|
|
572
|
+
if (typeof t == "string" && t.includes(e) || typeof t == "object" && fe(t, e)) return !0;
|
|
573
573
|
return !1;
|
|
574
574
|
}
|
|
575
|
-
let
|
|
576
|
-
function
|
|
577
|
-
if (!
|
|
578
|
-
const e =
|
|
575
|
+
let de = !1;
|
|
576
|
+
function Ie(o) {
|
|
577
|
+
if (!o) return;
|
|
578
|
+
const e = o.toLowerCase().trim();
|
|
579
579
|
return !!["1", "true", "yes", "on"].includes(e) || !["0", "false", "no", "off"].includes(e) && void 0;
|
|
580
580
|
}
|
|
581
|
-
function
|
|
582
|
-
return new Promise((
|
|
581
|
+
function j(o, e, t) {
|
|
582
|
+
return new Promise((n) => {
|
|
583
583
|
try {
|
|
584
|
-
const
|
|
585
|
-
|
|
584
|
+
const i = new URL(o), s = (i.protocol, N).request({ method: "GET", hostname: i.hostname, port: i.port || (i.protocol === "https:" ? 443 : 80), path: i.pathname + (i.search || ""), headers: e }, (g) => {
|
|
585
|
+
g.resume(), g.statusCode && g.statusCode >= 200 && g.statusCode < 400 ? n("ok") : n("http_error");
|
|
586
586
|
});
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
}),
|
|
587
|
+
s.on("error", () => n("error")), s.setTimeout(t, () => {
|
|
588
|
+
s.destroy(), n("timeout");
|
|
589
|
+
}), s.end();
|
|
590
590
|
} catch {
|
|
591
|
-
|
|
591
|
+
n("error");
|
|
592
592
|
}
|
|
593
593
|
});
|
|
594
594
|
}
|
|
595
|
-
class
|
|
595
|
+
class Te extends w {
|
|
596
596
|
constructor() {
|
|
597
597
|
super();
|
|
598
|
-
|
|
599
|
-
|
|
598
|
+
C(this, "serviceIdentifier", new X());
|
|
599
|
+
C(this, "supplementalFields", {});
|
|
600
600
|
this.setOperationName("CollectExceptions");
|
|
601
601
|
}
|
|
602
602
|
setSupplementalFields(t) {
|
|
603
603
|
this.supplementalFields = { ...this.supplementalFields, ...t };
|
|
604
604
|
}
|
|
605
605
|
normalizedSupplementalForGraphQL() {
|
|
606
|
-
const { isFromLocalService: t } = this.supplementalFields,
|
|
607
|
-
return t !== void 0 && (
|
|
606
|
+
const { isFromLocalService: t } = this.supplementalFields, n = {};
|
|
607
|
+
return t !== void 0 && (n.isFromLocalService = t), n;
|
|
608
608
|
}
|
|
609
609
|
async sendAppIdentifier() {
|
|
610
610
|
this.serviceIdentifier.doSend({});
|
|
611
611
|
}
|
|
612
|
-
async doSend(t,
|
|
613
|
-
this.sendAppIdentifier(), this.send(t,
|
|
612
|
+
async doSend(t, n) {
|
|
613
|
+
this.sendAppIdentifier(), this.send(t, n);
|
|
614
614
|
}
|
|
615
|
-
async send(t,
|
|
615
|
+
async send(t, n) {
|
|
616
616
|
l().sfDebug && console.log(" SENDING EXCEPTION...");
|
|
617
|
-
const
|
|
618
|
-
F(this.endpoint, this.operationName, this.getQuery(),
|
|
617
|
+
const i = JSON.stringify(L.encode(n)), s = this.normalizedSupplementalForGraphQL(), g = this.getVariables({ exceptionMessage: t, traceJson: i, reentrancyGuardPreactive: !1, library: l().packageLibraryType, version: l().version, ...s });
|
|
618
|
+
F(this.endpoint, this.operationName, this.getQuery(), g);
|
|
619
619
|
}
|
|
620
620
|
getQuery() {
|
|
621
621
|
return `
|
|
@@ -649,44 +649,86 @@ class Ye extends R {
|
|
|
649
649
|
`;
|
|
650
650
|
}
|
|
651
651
|
}
|
|
652
|
-
const
|
|
653
|
-
var
|
|
654
|
-
const
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
652
|
+
const ue = "getting request source code";
|
|
653
|
+
var $ = ((o) => (o.UNKNOWN = "unknown", o.ANONYMOUS = "anonymous", o.NOT_CAPTURED = "not captured", o))($ || {});
|
|
654
|
+
const Q = "http:", q = "https:";
|
|
655
|
+
function ye() {
|
|
656
|
+
return { capture_arguments: H(process.env.SF_FUNCSPAN_CAPTURE_ARGUMENTS, !0), capture_return_value: H(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: H(process.env.SF_FUNCSPAN_AUTOCAPTURE_ALL_CHILD_FUNCTIONS, !1), sample_rate: parseFloat(process.env.SF_FUNCSPAN_SAMPLE_RATE || "1.0"), enable_sampling: H(process.env.SF_FUNCSPAN_ENABLE_SAMPLING, !1), capture_sf_veritas: H(process.env.SF_FUNCSPAN_CAPTURE_SF_VERITAS, !1), parse_json_strings: H(process.env.SF_FUNCSPAN_PARSE_JSON_STRINGS, !1) };
|
|
657
|
+
}
|
|
658
|
+
function ot() {
|
|
659
|
+
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 };
|
|
660
|
+
}
|
|
661
|
+
function Se(o) {
|
|
662
|
+
try {
|
|
663
|
+
const e = o.split("-");
|
|
664
|
+
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" };
|
|
665
|
+
} catch (e) {
|
|
666
|
+
return console.error(`[FuncSpan] Failed to parse header override "${o}":`, e), null;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
function H(o, e) {
|
|
670
|
+
if (!o) return e;
|
|
671
|
+
const t = o.toLowerCase();
|
|
672
|
+
return t === "true" || t === "1" || t === "yes";
|
|
673
|
+
}
|
|
674
|
+
const se = new ie();
|
|
675
|
+
function Je(o) {
|
|
676
|
+
se.enterWith(o);
|
|
677
|
+
}
|
|
678
|
+
function Ze() {
|
|
679
|
+
return se.getStore();
|
|
680
|
+
}
|
|
681
|
+
function Xe() {
|
|
682
|
+
se.enterWith(void 0);
|
|
683
|
+
}
|
|
684
|
+
function _(...o) {
|
|
685
|
+
const e = {};
|
|
686
|
+
for (const t of o) for (const n in t) t[n] !== void 0 && (e[n] = t[n]);
|
|
687
|
+
return e;
|
|
688
|
+
}
|
|
689
|
+
function ee(o, e) {
|
|
690
|
+
try {
|
|
691
|
+
const t = JSON.stringify(o).length / 1048576;
|
|
692
|
+
return t <= e ? o : { _truncated: !0, _originalSizeMB: t.toFixed(2), _limitMB: e, _preview: JSON.stringify(o).substring(0, 500) + "..." };
|
|
693
|
+
} catch {
|
|
694
|
+
return { _error: "Failed to serialize data", _type: typeof o };
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
let Ce = !1;
|
|
698
|
+
function Ee() {
|
|
699
|
+
const o = l().sfDebug;
|
|
700
|
+
if (Ce) return void (o && console.log("[patchNodeHttpInbound] Already installed, skipping."));
|
|
659
701
|
let e;
|
|
660
|
-
|
|
702
|
+
Ce = !0;
|
|
661
703
|
try {
|
|
662
|
-
e = require("node:http"),
|
|
663
|
-
} catch (
|
|
664
|
-
return void console.error("Failed to require node:http:",
|
|
665
|
-
}
|
|
666
|
-
if (!e?.Server?.prototype) return void (
|
|
667
|
-
const t = e.Server.prototype,
|
|
668
|
-
|
|
669
|
-
if (
|
|
670
|
-
const
|
|
671
|
-
const
|
|
672
|
-
if (!
|
|
673
|
-
for (const [
|
|
674
|
-
return
|
|
675
|
-
})(
|
|
676
|
-
|
|
704
|
+
e = require("node:http"), o && console.log("[patchNodeHttpInbound] node:http required successfully.");
|
|
705
|
+
} catch (i) {
|
|
706
|
+
return void console.error("Failed to require node:http:", i);
|
|
707
|
+
}
|
|
708
|
+
if (!e?.Server?.prototype) return void (o && console.log("[patchNodeHttpInbound] http.Server.prototype not found."));
|
|
709
|
+
const t = e.Server.prototype, n = t.emit;
|
|
710
|
+
n && !t.__sf_inbound_patched__ ? (Object.defineProperty(t, "__sf_inbound_patched__", { value: !0, enumerable: !1, configurable: !1, writable: !1 }), o && console.log("[patchNodeHttpInbound] Patching http.Server.prototype.emit."), t.emit = function(i, ...s) {
|
|
711
|
+
if (i !== "request") return o && console.log(`[patchNodeHttpInbound] Passing through event: ${i}`), n.call(this, i, ...s);
|
|
712
|
+
const g = s[0], r = s[1], a = (function(p) {
|
|
713
|
+
const u = {};
|
|
714
|
+
if (!p) return u;
|
|
715
|
+
for (const [m, A] of Object.entries(p)) A != null && (Array.isArray(A) ? u[m.toLowerCase()] = A.join(", ") : u[m.toLowerCase()] = String(A));
|
|
716
|
+
return u;
|
|
717
|
+
})(g?.headers), c = a["x-sf3-rid"], d = a["x-sf3-functionspancaptureoverride"];
|
|
718
|
+
o && (console.log("[patchNodeHttpInbound] Intercepted request event."), console.log("[patchNodeHttpInbound] Inbound headers:", a), console.log("[patchNodeHttpInbound] Trace header:", c), console.log("[patchNodeHttpInbound] FuncSpan override header:", d));
|
|
677
719
|
const I = G.getInstance();
|
|
678
720
|
I.setTraceId(c);
|
|
679
|
-
const
|
|
680
|
-
return
|
|
681
|
-
c && I.setTraceId(c),
|
|
682
|
-
const
|
|
683
|
-
|
|
721
|
+
const h = I.getTraceId();
|
|
722
|
+
return o && console.log("[patchNodeHttpInbound] Context traceId set:", h), I.runWith({ inboundHeaders: a, ...c ? { traceId: c } : {} }, () => {
|
|
723
|
+
c && I.setTraceId(c), d && (Je(d), o && console.log("[patchNodeHttpInbound] FuncSpan override set:", d)), o && console.log("[patchNodeHttpInbound] Running request handler in context.");
|
|
724
|
+
const p = () => {
|
|
725
|
+
o && console.log("[patchNodeHttpInbound] Response finished/closed for traceId:", I.getTraceId()), d && (Xe(), o && console.log("[patchNodeHttpInbound] FuncSpan override cleared"));
|
|
684
726
|
};
|
|
685
|
-
return r.on("finish",
|
|
727
|
+
return r.on("finish", p), r.on("close", p), n.call(this, i, g, r);
|
|
686
728
|
});
|
|
687
|
-
}) :
|
|
729
|
+
}) : o && console.log("[patchNodeHttpInbound] Already patched, skipping.");
|
|
688
730
|
}
|
|
689
|
-
class
|
|
731
|
+
class _e extends oe {
|
|
690
732
|
constructor() {
|
|
691
733
|
super(), this.setOperationName("DomainsToNotPassHeaderTo");
|
|
692
734
|
}
|
|
@@ -706,14 +748,14 @@ class Ue extends ne {
|
|
|
706
748
|
domains: $domains
|
|
707
749
|
)
|
|
708
750
|
}
|
|
709
|
-
`,
|
|
710
|
-
F(this.endpoint, this.operationName, t,
|
|
751
|
+
`, n = { apiKey: this.apiKey, serviceUuid: this.serviceUUID, domains: e };
|
|
752
|
+
F(this.endpoint, this.operationName, t, n);
|
|
711
753
|
}
|
|
712
754
|
}
|
|
713
|
-
class
|
|
755
|
+
class De extends w {
|
|
714
756
|
constructor() {
|
|
715
757
|
super();
|
|
716
|
-
|
|
758
|
+
C(this, "serviceIdentifier", new X());
|
|
717
759
|
this.setOperationName("CollectNetworkHops");
|
|
718
760
|
}
|
|
719
761
|
async sendAppIdentifier() {
|
|
@@ -723,8 +765,8 @@ class Xe extends R {
|
|
|
723
765
|
this.sendAppIdentifier(), this.send(t);
|
|
724
766
|
}
|
|
725
767
|
async send(t) {
|
|
726
|
-
const { name:
|
|
727
|
-
F(this.endpoint, this.operationName, this.getQuery(),
|
|
768
|
+
const { name: n, column: i, line: s, entrypoint: g, retryWithoutTraceId: r } = t, a = this.getVariables({ name: n, column: i, line: s, entrypoint: g, retryWithoutTraceId: r });
|
|
769
|
+
F(this.endpoint, this.operationName, this.getQuery(), a);
|
|
728
770
|
}
|
|
729
771
|
getQuery() {
|
|
730
772
|
return `
|
|
@@ -754,10 +796,10 @@ class Xe extends R {
|
|
|
754
796
|
`;
|
|
755
797
|
}
|
|
756
798
|
}
|
|
757
|
-
class
|
|
799
|
+
class $e extends w {
|
|
758
800
|
constructor() {
|
|
759
801
|
super();
|
|
760
|
-
|
|
802
|
+
C(this, "serviceIdentifier", new X());
|
|
761
803
|
this.setOperationName("CollectNetworkRequest");
|
|
762
804
|
}
|
|
763
805
|
async sendAppIdentifier() {
|
|
@@ -777,75 +819,75 @@ class Je extends R {
|
|
|
777
819
|
`;
|
|
778
820
|
}
|
|
779
821
|
async send(t) {
|
|
780
|
-
const
|
|
781
|
-
await F(this.endpoint, this.operationName, this.getQuery(),
|
|
822
|
+
const n = { data: { ...t } };
|
|
823
|
+
await F(this.endpoint, this.operationName, this.getQuery(), n);
|
|
782
824
|
}
|
|
783
825
|
}
|
|
784
|
-
const
|
|
785
|
-
class
|
|
826
|
+
const te = [400, 403];
|
|
827
|
+
class Le {
|
|
786
828
|
constructor(e = []) {
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
829
|
+
C(this, "HEADER_TRACING", "X-Sf3-Rid");
|
|
830
|
+
C(this, "HEADER_LOG_GUARD", "reentrancy_guard_logging_preactive");
|
|
831
|
+
C(this, "HEADER_PRINT_GUARD", "reentrancy_guard_print_preactive");
|
|
832
|
+
C(this, "HEADER_EXCEPTION_GUARD", "reentrancy_guard_exception_preactive");
|
|
833
|
+
C(this, "contextManager");
|
|
792
834
|
this.contextManager = G.getInstance(), e?.forEach((t) => {
|
|
793
835
|
typeof t == "string" && t.trim() && this.contextManager.getExcludedDomains().add(t);
|
|
794
836
|
}), l().sfDebug && console.log("[RequestInterceptor] Initialized with static excluded domains.");
|
|
795
837
|
}
|
|
796
838
|
extractIdsFromTraceHeader(e, t = this.HEADER_TRACING) {
|
|
797
|
-
let
|
|
798
|
-
if (e instanceof Headers)
|
|
839
|
+
let n;
|
|
840
|
+
if (e instanceof Headers) n = e.get(t) ?? void 0;
|
|
799
841
|
else {
|
|
800
|
-
const
|
|
801
|
-
for (const [
|
|
802
|
-
|
|
842
|
+
const s = t.toLowerCase();
|
|
843
|
+
for (const [g, r] of Object.entries(e)) if (g.toLowerCase() === s) {
|
|
844
|
+
n = r;
|
|
803
845
|
break;
|
|
804
846
|
}
|
|
805
847
|
}
|
|
806
|
-
if (!
|
|
807
|
-
const
|
|
808
|
-
return
|
|
848
|
+
if (!n) return {};
|
|
849
|
+
const i = n.split("/").filter(Boolean);
|
|
850
|
+
return i.length < 3 ? {} : { sessionId: i[0], pageVisitId: i[1], requestId: i[i.length - 1] };
|
|
809
851
|
}
|
|
810
852
|
parseStackFrame(e) {
|
|
811
853
|
const t = /\((.*):(\d+):(\d+)\)$/.exec(e.trim());
|
|
812
854
|
if (!t) return null;
|
|
813
|
-
const [,
|
|
814
|
-
return { filePath:
|
|
855
|
+
const [, n, i, s] = t;
|
|
856
|
+
return { filePath: n, line: parseInt(i, 10), column: parseInt(s, 10) };
|
|
815
857
|
}
|
|
816
|
-
async getOriginalPosition(e, t,
|
|
817
|
-
let
|
|
818
|
-
const
|
|
858
|
+
async getOriginalPosition(e, t, n) {
|
|
859
|
+
let i = { source: e, line: t, column: n, name: null };
|
|
860
|
+
const s = e + ".map";
|
|
819
861
|
try {
|
|
820
|
-
const
|
|
821
|
-
let r = (await new
|
|
822
|
-
r.source && (
|
|
823
|
-
} catch (
|
|
824
|
-
l().sfDebug && console.error(`Could not read/parse map file at ${
|
|
862
|
+
const g = JSON.parse(pe(s, "utf-8"));
|
|
863
|
+
let r = (await new he.SourceMapConsumer(g)).originalPositionFor({ line: t, column: n });
|
|
864
|
+
r.source && (i = r);
|
|
865
|
+
} catch (g) {
|
|
866
|
+
l().sfDebug && console.error(`Could not read/parse map file at ${s}:`, g);
|
|
825
867
|
}
|
|
826
|
-
return { originalPos:
|
|
827
|
-
}
|
|
828
|
-
captureFirstUserLines(e, t = 10,
|
|
829
|
-
const
|
|
830
|
-
Error.stackTraceLimit = Math.max(
|
|
831
|
-
const
|
|
832
|
-
|
|
833
|
-
const r =
|
|
834
|
-
Error.stackTraceLimit =
|
|
835
|
-
const
|
|
868
|
+
return { originalPos: i };
|
|
869
|
+
}
|
|
870
|
+
captureFirstUserLines(e, t = 10, n = !1) {
|
|
871
|
+
const i = l().sfDebug ? 10 : t, s = Error.stackTraceLimit;
|
|
872
|
+
Error.stackTraceLimit = Math.max(s, i);
|
|
873
|
+
const g = new Error(ue);
|
|
874
|
+
ue in Error && Error.captureStackTrace(g, this.captureFirstUserLines);
|
|
875
|
+
const r = g.stack || "";
|
|
876
|
+
Error.stackTraceLimit = s;
|
|
877
|
+
const a = r.split(`
|
|
836
878
|
`).slice(1), c = [];
|
|
837
|
-
for (const
|
|
838
|
-
if (!(
|
|
839
|
-
for (const
|
|
840
|
-
const
|
|
841
|
-
|
|
842
|
-
const { originalPos:
|
|
843
|
-
if (
|
|
844
|
-
l().sfDebug && console.log("[RequestInterceptor] First user code line:",
|
|
845
|
-
const p = { line:
|
|
879
|
+
for (const d of a)
|
|
880
|
+
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 >= t)) break;
|
|
881
|
+
for (const d of c) {
|
|
882
|
+
const I = this.parseStackFrame(d);
|
|
883
|
+
I ? (async () => {
|
|
884
|
+
const { originalPos: h } = await this.getOriginalPosition(I.filePath, I.line, I.column);
|
|
885
|
+
if (h) {
|
|
886
|
+
l().sfDebug && console.log("[RequestInterceptor] First user code line:", h);
|
|
887
|
+
const p = { line: h.line?.toString() || $.UNKNOWN, column: h.column?.toString() || $.NOT_CAPTURED, name: h.name || $.NOT_CAPTURED, entrypoint: h.source, retryWithoutTraceId: n };
|
|
846
888
|
e.doSend(p);
|
|
847
889
|
}
|
|
848
|
-
})() : l().sfDebug && console.error("Could not parse stack line:",
|
|
890
|
+
})() : l().sfDebug && console.error("Could not parse stack line:", d);
|
|
849
891
|
}
|
|
850
892
|
}
|
|
851
893
|
addReentrancyGuardHeaders(e) {
|
|
@@ -855,47 +897,54 @@ class Te {
|
|
|
855
897
|
return !Ae.some((t) => new RegExp(`^${t.replace(/\*/g, ".*")}$`).test(e));
|
|
856
898
|
}
|
|
857
899
|
addTracingHeaders(e, t) {
|
|
858
|
-
const
|
|
859
|
-
return
|
|
900
|
+
const n = new URL(t).hostname, i = this.shouldPropagateHeaders(n);
|
|
901
|
+
return i ? this.addTracingHeader(e, t) : l().sfDebug && console.error(`[RequestInterceptor] Excluded domain: ${n}`), i;
|
|
860
902
|
}
|
|
861
903
|
addTracingHeader(e, t) {
|
|
862
|
-
const
|
|
863
|
-
|
|
904
|
+
const n = Ze();
|
|
905
|
+
if (n) {
|
|
906
|
+
const r = Se(n);
|
|
907
|
+
if (r && r.sample_rate === 0) return void (l().sfDebug && console.log(`[RequestInterceptor] Function span tracking disabled (sample_rate=0), skipping tracing header for ${t}`));
|
|
908
|
+
}
|
|
909
|
+
const i = this.contextManager.getOrSetSfTraceId(), s = this.contextManager.getOrSetPageVisitUUID(), g = R();
|
|
910
|
+
e.set(this.HEADER_TRACING, `${i}/${s}/${g}`), l().sfDebug && console.log(`[RequestInterceptor] Added tracing header for ${t}`);
|
|
864
911
|
}
|
|
865
912
|
patchFetch(e, t) {
|
|
866
|
-
const
|
|
867
|
-
typeof
|
|
913
|
+
const n = globalThis.fetch;
|
|
914
|
+
typeof n == "function" ? globalThis.fetch = async (i, s) => {
|
|
915
|
+
const g = new Headers(s?.headers);
|
|
916
|
+
if (g.get(this.HEADER_LOG_GUARD) === "true" || g.get(this.HEADER_PRINT_GUARD) === "true" || g.get(this.HEADER_EXCEPTION_GUARD) === "true") return n(i, s);
|
|
868
917
|
this.captureFirstUserLines(e);
|
|
869
|
-
const
|
|
870
|
-
let
|
|
871
|
-
typeof
|
|
872
|
-
|
|
873
|
-
})) : l().sfDebug && console.error("[Sailfish RequestInterceptor] Invalid fetch input."), l().sfDebug && console.log("[RequestInterceptor] Fetching request to:",
|
|
874
|
-
const c = new URL(
|
|
918
|
+
const r = Date.now();
|
|
919
|
+
let a;
|
|
920
|
+
typeof i == "string" || i instanceof URL ? a = i.toString() : i instanceof Request ? (a = i.url, i.headers.forEach((u, m) => {
|
|
921
|
+
g.set(m, u);
|
|
922
|
+
})) : l().sfDebug && console.error("[Sailfish RequestInterceptor] Invalid fetch input."), l().sfDebug && console.log("[RequestInterceptor] Fetching request to:", a);
|
|
923
|
+
const c = new URL(a).hostname, d = new Headers(g), I = this.addTracingHeaders(g, a), h = { ...s, headers: g };
|
|
875
924
|
let p;
|
|
876
925
|
try {
|
|
877
|
-
let
|
|
878
|
-
this.addTracingHeaders(
|
|
879
|
-
const
|
|
880
|
-
l().sfDebug && console.log(`[RequestInterceptor] Fetch completed: ${
|
|
881
|
-
const { sessionId:
|
|
882
|
-
return t.doSend({ apiKey: l().apiKey, requestId:
|
|
883
|
-
} catch (
|
|
884
|
-
const
|
|
885
|
-
l().sfDebug && console.error(`[RequestInterceptor] Fetch failed: ${
|
|
926
|
+
let u = !1;
|
|
927
|
+
this.addTracingHeaders(d, a), p = await n(a, h), I && te.includes(p.status) ? (p = await n(a, { ...s, headers: d }), u = !0, this.captureFirstUserLines(e, 10, u)) : this.contextManager.addSupportedDomains(c);
|
|
928
|
+
const m = Date.now();
|
|
929
|
+
l().sfDebug && console.log(`[RequestInterceptor] Fetch completed: ${a}, Status: ${p.status}, Duration: ${m - r}ms`);
|
|
930
|
+
const { sessionId: A, pageVisitId: y, requestId: b } = this.extractIdsFromTraceHeader(g);
|
|
931
|
+
return t.doSend({ apiKey: l().apiKey, requestId: b, pageVisitId: y, recordingSessionId: A, serviceUuid: l().serviceUUID, timestampStart: r.toString(), timestampEnd: m.toString(), responseCode: p.status, success: !0, error: null, url: a, method: h.method || "GET", retryWithoutTraceId: u, parentSpanId: M() }), p;
|
|
932
|
+
} catch (u) {
|
|
933
|
+
const m = Date.now();
|
|
934
|
+
l().sfDebug && console.error(`[RequestInterceptor] Fetch failed: ${a}, Error: ${u}, Duration: ${m - r}ms`);
|
|
886
935
|
}
|
|
887
936
|
} : l().sfDebug && console.error("[RequestInterceptor] Fetch not available.");
|
|
888
937
|
}
|
|
889
938
|
patchHttp(e, t) {
|
|
890
|
-
if (l().sfDebug && console.log("[RequestInterceptor] Initializing HTTP/HTTPS request patch..."), !
|
|
891
|
-
const
|
|
892
|
-
|
|
939
|
+
if (l().sfDebug && console.log("[RequestInterceptor] Initializing HTTP/HTTPS request patch..."), !N || typeof N.request != "function") return void (l().sfDebug && console.log("[RequestInterceptor] HTTP/HTTPS not available."));
|
|
940
|
+
const n = N.request.bind(N), i = N.request.bind(N);
|
|
941
|
+
N.request = function(s, g) {
|
|
893
942
|
let r;
|
|
894
943
|
try {
|
|
895
|
-
if (typeof
|
|
896
|
-
const c = new URL(
|
|
897
|
-
r = { protocol: c.protocol ||
|
|
898
|
-
} else
|
|
944
|
+
if (typeof s == "string") {
|
|
945
|
+
const c = new URL(s);
|
|
946
|
+
r = { protocol: c.protocol || Q, hostname: c.hostname, path: c.pathname + c.search, headers: {} };
|
|
947
|
+
} else s instanceof URL ? r = { protocol: s.protocol || Q, hostname: s.hostname, path: s.pathname + s.search, headers: {} } : (r = { ...s }, r.protocol || (r.protocol = Q));
|
|
899
948
|
if (r.headers) {
|
|
900
949
|
const c = `${r.protocol}//${r.hostname}`;
|
|
901
950
|
this.addTracingHeaders(r.headers, c), this.captureFirstUserLines(e);
|
|
@@ -903,24 +952,24 @@ class Te {
|
|
|
903
952
|
} catch (c) {
|
|
904
953
|
throw l().sfDebug && console.error("[RequestInterceptor] Error while processing HTTP request options:", c), c;
|
|
905
954
|
}
|
|
906
|
-
let
|
|
907
|
-
return
|
|
908
|
-
const
|
|
909
|
-
if (r.headers && this.shouldPropagateHeaders(new URL(
|
|
955
|
+
let a = !1;
|
|
956
|
+
return n(r, (c) => {
|
|
957
|
+
const d = `${r.protocol}//${r.hostname}`;
|
|
958
|
+
if (r.headers && this.shouldPropagateHeaders(new URL(d).hostname) && te.includes(c.statusCode || 0)) {
|
|
910
959
|
r.hostname;
|
|
911
|
-
const
|
|
912
|
-
delete
|
|
960
|
+
const u = { ...r, headers: { ...r.headers } };
|
|
961
|
+
delete u.headers[this.HEADER_TRACING], n(u, g), a = !0, this.captureFirstUserLines(e, 10, a);
|
|
913
962
|
}
|
|
914
|
-
const { sessionId:
|
|
915
|
-
t.doSend({ apiKey: l().apiKey, requestId: p, pageVisitId:
|
|
963
|
+
const { sessionId: I, pageVisitId: h, requestId: p } = this.extractIdsFromTraceHeader(r.headers);
|
|
964
|
+
t.doSend({ apiKey: l().apiKey, requestId: p, pageVisitId: h, recordingSessionId: I, serviceUuid: l().serviceUUID, timestampStart: Date.now().toString(), timestampEnd: Date.now().toString(), responseCode: c.statusCode || 0, success: !!c.statusCode && c.statusCode < 400, error: null, url: d, method: r.method || "GET", retryWithoutTraceId: a, parentSpanId: M() }), g?.(c);
|
|
916
965
|
});
|
|
917
|
-
},
|
|
966
|
+
}, N.request = function(s, g) {
|
|
918
967
|
let r;
|
|
919
968
|
try {
|
|
920
|
-
if (typeof
|
|
921
|
-
const c = new URL(
|
|
922
|
-
r = { protocol: c.protocol ||
|
|
923
|
-
} else
|
|
969
|
+
if (typeof s == "string") {
|
|
970
|
+
const c = new URL(s);
|
|
971
|
+
r = { protocol: c.protocol || q, hostname: c.hostname, path: c.pathname + c.search, headers: {} };
|
|
972
|
+
} else s instanceof URL ? r = { protocol: s.protocol || q, hostname: s.hostname, path: s.pathname + s.search, headers: {} } : (r = { ...s }, r.protocol || (r.protocol = q));
|
|
924
973
|
if (r.headers) {
|
|
925
974
|
const c = `${r.protocol}//${r.hostname}`;
|
|
926
975
|
this.addTracingHeaders(r.headers, c);
|
|
@@ -928,30 +977,30 @@ class Te {
|
|
|
928
977
|
} catch (c) {
|
|
929
978
|
throw l().sfDebug && console.error("[RequestInterceptor] Error while processing HTTPS request options:", c), c;
|
|
930
979
|
}
|
|
931
|
-
let
|
|
932
|
-
return
|
|
933
|
-
const
|
|
934
|
-
if (r.headers && this.shouldPropagateHeaders(new URL(
|
|
935
|
-
const
|
|
936
|
-
delete
|
|
980
|
+
let a = !1;
|
|
981
|
+
return i(r, (c) => {
|
|
982
|
+
const d = `${r.protocol}//${r.hostname}`;
|
|
983
|
+
if (r.headers && this.shouldPropagateHeaders(new URL(d).hostname) && te.includes(c.statusCode || 0)) {
|
|
984
|
+
const u = { ...r, headers: { ...r.headers } };
|
|
985
|
+
delete u.headers[this.HEADER_TRACING], i(u, g), a = !0, this.captureFirstUserLines(e, 10, a);
|
|
937
986
|
}
|
|
938
|
-
const { sessionId:
|
|
939
|
-
t.doSend({ apiKey: l().apiKey, requestId: p, pageVisitId:
|
|
987
|
+
const { sessionId: I, pageVisitId: h, requestId: p } = this.extractIdsFromTraceHeader(r.headers);
|
|
988
|
+
t.doSend({ apiKey: l().apiKey, requestId: p, pageVisitId: h, recordingSessionId: I, serviceUuid: l().serviceUUID, timestampStart: Date.now().toString(), timestampEnd: Date.now().toString(), responseCode: c.statusCode || 0, success: !!c.statusCode && c.statusCode < 400, error: null, url: d, method: r.method || "GET", retryWithoutTraceId: a, parentSpanId: M() }), g?.(c);
|
|
940
989
|
});
|
|
941
990
|
}, l().sfDebug && console.log("✅ HTTP and HTTPS request methods patched globally.");
|
|
942
991
|
}
|
|
943
992
|
tryPatch(e, t) {
|
|
944
993
|
try {
|
|
945
994
|
require.resolve(t), e(), console.log(`[RequestInterceptor] Patched ${t}`);
|
|
946
|
-
} catch (
|
|
947
|
-
console.warn(`[RequestInterceptor] Could not patch ${t}: ${
|
|
995
|
+
} catch (n) {
|
|
996
|
+
console.warn(`[RequestInterceptor] Could not patch ${t}: ${n.message}`);
|
|
948
997
|
}
|
|
949
998
|
}
|
|
950
999
|
getExcludedDomains() {
|
|
951
1000
|
return [...this.contextManager.getExcludedDomains()];
|
|
952
1001
|
}
|
|
953
1002
|
}
|
|
954
|
-
class
|
|
1003
|
+
class ze extends oe {
|
|
955
1004
|
constructor() {
|
|
956
1005
|
super(), this.setOperationName("UpdateServiceDetails");
|
|
957
1006
|
}
|
|
@@ -983,259 +1032,289 @@ class _e extends ne {
|
|
|
983
1032
|
F(this.endpoint, this.operationName, e, t);
|
|
984
1033
|
}
|
|
985
1034
|
}
|
|
986
|
-
|
|
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
|
-
}
|
|
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: 0, enable_sampling: !1, capture_sf_veritas: !1, parse_json_strings: !1 };
|
|
991
|
-
}
|
|
992
|
-
function De(s) {
|
|
993
|
-
try {
|
|
994
|
-
const e = s.split("-");
|
|
995
|
-
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" };
|
|
996
|
-
} catch (e) {
|
|
997
|
-
return console.error(`[FuncSpan] Failed to parse header override "${s}":`, e), null;
|
|
998
|
-
}
|
|
999
|
-
}
|
|
1000
|
-
function w(s, e) {
|
|
1001
|
-
if (!s) return e;
|
|
1002
|
-
const t = s.toLowerCase();
|
|
1003
|
-
return t === "true" || t === "1" || t === "yes";
|
|
1004
|
-
}
|
|
1005
|
-
const ie = new te();
|
|
1006
|
-
function tt(s) {
|
|
1007
|
-
ie.enterWith(s);
|
|
1008
|
-
}
|
|
1009
|
-
function Le() {
|
|
1010
|
-
return ie.getStore();
|
|
1011
|
-
}
|
|
1012
|
-
function nt() {
|
|
1013
|
-
ie.enterWith(void 0);
|
|
1014
|
-
}
|
|
1015
|
-
function E(...s) {
|
|
1016
|
-
const e = {};
|
|
1017
|
-
for (const t of s) for (const i in t) t[i] !== void 0 && (e[i] = t[i]);
|
|
1018
|
-
return e;
|
|
1019
|
-
}
|
|
1020
|
-
function ee(s, e) {
|
|
1021
|
-
try {
|
|
1022
|
-
const t = JSON.stringify(s).length / 1048576;
|
|
1023
|
-
return t <= e ? s : { _truncated: !0, _originalSizeMB: t.toFixed(2), _limitMB: e, _preview: JSON.stringify(s).substring(0, 500) + "..." };
|
|
1024
|
-
} catch {
|
|
1025
|
-
return { _error: "Failed to serialize data", _type: typeof s };
|
|
1026
|
-
}
|
|
1027
|
-
}
|
|
1028
|
-
class ze {
|
|
1035
|
+
class xe {
|
|
1029
1036
|
constructor(e = [process.cwd()], t = !1) {
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1037
|
+
C(this, "rootPaths");
|
|
1038
|
+
C(this, "fileConfigs", /* @__PURE__ */ new Map());
|
|
1039
|
+
C(this, "functionConfigs", /* @__PURE__ */ new Map());
|
|
1040
|
+
C(this, "directoryConfigs", /* @__PURE__ */ new Map());
|
|
1041
|
+
C(this, "hasSailfishFiles", !1);
|
|
1042
|
+
C(this, "debug");
|
|
1036
1043
|
this.rootPaths = e, this.debug = t || process.env.SF_DEBUG === "true";
|
|
1037
1044
|
}
|
|
1038
1045
|
async loadAllConfigs() {
|
|
1039
1046
|
this.debug && console.log("[FuncSpan ConfigLoader] Scanning for .sailfish files in:", this.rootPaths);
|
|
1040
1047
|
const e = [];
|
|
1041
|
-
for (const t of this.rootPaths)
|
|
1048
|
+
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}`);
|
|
1042
1049
|
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");
|
|
1043
1050
|
for (const t of e) await this._loadConfigFile(t);
|
|
1044
1051
|
await this._resolveInheritance(), this.debug && console.log(`[FuncSpan ConfigLoader] Loaded ${this.fileConfigs.size} file configs, ${this.functionConfigs.size} function configs`);
|
|
1045
1052
|
}
|
|
1046
1053
|
getConfig(e, t) {
|
|
1047
|
-
const
|
|
1054
|
+
const n = this.hasSailfishFiles ? ye() : { 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 }, i = this._getDirectoryConfig(e), s = v.normalize(e), g = this.fileConfigs.get(s) || {};
|
|
1048
1055
|
let r = {};
|
|
1049
1056
|
if (t) {
|
|
1050
|
-
const
|
|
1051
|
-
|
|
1057
|
+
const a = this.functionConfigs.get(s);
|
|
1058
|
+
a && (r = a.get(t) || {});
|
|
1052
1059
|
}
|
|
1053
|
-
return
|
|
1060
|
+
return _(n, i, g, r);
|
|
1054
1061
|
}
|
|
1055
1062
|
async _walkDirectory(e, t) {
|
|
1056
1063
|
try {
|
|
1057
|
-
const
|
|
1058
|
-
for (const
|
|
1059
|
-
const
|
|
1060
|
-
|
|
1064
|
+
const n = k.readdirSync(e, { withFileTypes: !0 });
|
|
1065
|
+
for (const i of n) {
|
|
1066
|
+
const s = v.join(e, i.name);
|
|
1067
|
+
i.isFile() && i.name === ".sailfish" ? t.push(s) : i.name === "node_modules" || i.isDirectory() && i.name.startsWith(".") && i.name !== ".sailfish" || i.isDirectory() && await this._walkDirectory(s, t);
|
|
1061
1068
|
}
|
|
1062
|
-
} catch (
|
|
1063
|
-
this.debug && console.error(`[FuncSpan ConfigLoader] Error walking directory ${e}:`,
|
|
1069
|
+
} catch (n) {
|
|
1070
|
+
this.debug && console.error(`[FuncSpan ConfigLoader] Error walking directory ${e}:`, n);
|
|
1064
1071
|
}
|
|
1065
1072
|
}
|
|
1066
1073
|
async _loadConfigFile(e) {
|
|
1067
1074
|
try {
|
|
1068
|
-
const t =
|
|
1069
|
-
let
|
|
1075
|
+
const t = k.readFileSync(e, "utf-8"), n = v.dirname(e);
|
|
1076
|
+
let i = null;
|
|
1070
1077
|
try {
|
|
1071
|
-
|
|
1078
|
+
i = JSON.parse(t);
|
|
1072
1079
|
} catch {
|
|
1073
1080
|
try {
|
|
1074
|
-
|
|
1075
|
-
} catch (
|
|
1076
|
-
return void (this.debug && console.error(`[FuncSpan ConfigLoader] Failed to parse ${e} as JSON or YAML:`,
|
|
1081
|
+
i = require("js-yaml").load(t);
|
|
1082
|
+
} catch (s) {
|
|
1083
|
+
return void (this.debug && console.error(`[FuncSpan ConfigLoader] Failed to parse ${e} as JSON or YAML:`, s));
|
|
1077
1084
|
}
|
|
1078
1085
|
}
|
|
1079
|
-
if (!
|
|
1080
|
-
|
|
1086
|
+
if (!i) return;
|
|
1087
|
+
i.default && this.directoryConfigs.set(n, i.default), i.files && await this._expandFileGlobs(n, i.files, i.default || {}), i.functions && this._storeFunctionConfigs(n, i.functions, i.default || {}), this.debug && (console.log(`[FuncSpan ConfigLoader] Loaded config from ${e}`), console.log(`[FuncSpan ConfigLoader] Directory: ${n}`), console.log(`[FuncSpan ConfigLoader] Has default: ${!!i.default}`), console.log(`[FuncSpan ConfigLoader] File patterns: ${Object.keys(i.files || {}).length}`), console.log(`[FuncSpan ConfigLoader] Functions: ${Object.keys(i.functions || {}).length}`));
|
|
1081
1088
|
} catch (t) {
|
|
1082
1089
|
this.debug && console.error(`[FuncSpan ConfigLoader] Error loading ${e}:`, t);
|
|
1083
1090
|
}
|
|
1084
1091
|
}
|
|
1085
|
-
async _expandFileGlobs(e, t,
|
|
1086
|
-
for (const [
|
|
1087
|
-
const
|
|
1088
|
-
this.debug && console.log(`[FuncSpan ConfigLoader] Pattern '${
|
|
1089
|
-
for (const
|
|
1090
|
-
const c = v.normalize(
|
|
1091
|
-
this.fileConfigs.set(c,
|
|
1092
|
+
async _expandFileGlobs(e, t, n) {
|
|
1093
|
+
for (const [i, s] of Object.entries(t)) try {
|
|
1094
|
+
const g = v.join(e, i), r = await Be(g, { absolute: !0, nodir: !0, ignore: ["**/node_modules/**", "**/.git/**"] });
|
|
1095
|
+
this.debug && console.log(`[FuncSpan ConfigLoader] Pattern '${i}' matched ${r.length} files`);
|
|
1096
|
+
for (const a of r) {
|
|
1097
|
+
const c = v.normalize(a), d = _(n, s);
|
|
1098
|
+
this.fileConfigs.set(c, d), this.debug && r.length <= 5 && console.log(`[FuncSpan ConfigLoader] - ${a}`);
|
|
1092
1099
|
}
|
|
1093
|
-
} catch (
|
|
1094
|
-
this.debug && console.error(`[FuncSpan ConfigLoader] Error expanding glob '${
|
|
1100
|
+
} catch (g) {
|
|
1101
|
+
this.debug && console.error(`[FuncSpan ConfigLoader] Error expanding glob '${i}':`, g);
|
|
1095
1102
|
}
|
|
1096
1103
|
}
|
|
1097
|
-
_storeFunctionConfigs(e, t,
|
|
1098
|
-
for (const [
|
|
1099
|
-
const
|
|
1100
|
-
if (
|
|
1101
|
-
this.debug && console.warn(`[FuncSpan ConfigLoader] Invalid function pattern '${
|
|
1104
|
+
_storeFunctionConfigs(e, t, n) {
|
|
1105
|
+
for (const [i, s] of Object.entries(t)) {
|
|
1106
|
+
const g = i.split("::");
|
|
1107
|
+
if (g.length !== 2) {
|
|
1108
|
+
this.debug && console.warn(`[FuncSpan ConfigLoader] Invalid function pattern '${i}' (expected format: 'file.ts::functionName')`);
|
|
1102
1109
|
continue;
|
|
1103
1110
|
}
|
|
1104
|
-
const [r,
|
|
1111
|
+
const [r, a] = g, c = v.normalize(v.join(e, r));
|
|
1105
1112
|
this.functionConfigs.has(c) || this.functionConfigs.set(c, /* @__PURE__ */ new Map());
|
|
1106
|
-
const
|
|
1107
|
-
|
|
1113
|
+
const d = this.functionConfigs.get(c), I = _(n, s);
|
|
1114
|
+
d.set(a, I), this.debug && console.log(`[FuncSpan ConfigLoader] Function config: ${c}::${a}`);
|
|
1108
1115
|
}
|
|
1109
1116
|
}
|
|
1110
1117
|
async _resolveInheritance() {
|
|
1111
1118
|
}
|
|
1112
1119
|
_getDirectoryConfig(e) {
|
|
1113
1120
|
let t = v.dirname(v.normalize(e));
|
|
1114
|
-
const
|
|
1121
|
+
const n = [];
|
|
1115
1122
|
for (; t && t !== v.dirname(t); ) {
|
|
1116
|
-
const
|
|
1117
|
-
|
|
1123
|
+
const i = this.directoryConfigs.get(t);
|
|
1124
|
+
i && n.unshift(i), t = v.dirname(t);
|
|
1118
1125
|
}
|
|
1119
|
-
return
|
|
1126
|
+
return n.reduce((i, s) => _(i, s), {});
|
|
1120
1127
|
}
|
|
1121
1128
|
}
|
|
1122
1129
|
let J = null;
|
|
1123
|
-
async function
|
|
1124
|
-
J = new
|
|
1130
|
+
async function ke(o, e) {
|
|
1131
|
+
J = new xe(o, e), await J.loadAllConfigs();
|
|
1125
1132
|
}
|
|
1126
|
-
function
|
|
1127
|
-
return J ? J.getConfig(
|
|
1133
|
+
function Oe(o, e) {
|
|
1134
|
+
return J ? J.getConfig(o, e) : (process.env.SF_DEBUG === "true" && console.log("[FuncSpan ConfigLoader] Config loader not initialized, using env config for worker process"), ye());
|
|
1128
1135
|
}
|
|
1129
|
-
function
|
|
1136
|
+
function Pe() {
|
|
1130
1137
|
return J !== null;
|
|
1131
1138
|
}
|
|
1132
|
-
function
|
|
1133
|
-
if (!
|
|
1134
|
-
const
|
|
1135
|
-
console.error(
|
|
1139
|
+
function st(o) {
|
|
1140
|
+
if (!o || !o.apiKey) {
|
|
1141
|
+
const i = `The required API Key is not provided: ${JSON.stringify(o)}`;
|
|
1142
|
+
console.error(i);
|
|
1136
1143
|
}
|
|
1137
|
-
const { config: e } =
|
|
1144
|
+
const { config: e } = Ve(o);
|
|
1138
1145
|
if (e.sfDebug && console.log("Updated configuration after applying options:", e), !e.apiKey || !e.apiGraphqlEndpoint) {
|
|
1139
|
-
const
|
|
1140
|
-
throw console.error(
|
|
1146
|
+
const i = `The required config is not provided: ${JSON.stringify(e)}`;
|
|
1147
|
+
throw console.error(i), new Error(i);
|
|
1141
1148
|
}
|
|
1142
|
-
|
|
1143
|
-
e.sfDebug && console.error("[FuncSpan] Failed to initialize config loader:",
|
|
1149
|
+
Pe() || ke(void 0, e.sfDebug).catch((i) => {
|
|
1150
|
+
e.sfDebug && console.error("[FuncSpan] Failed to initialize config loader:", i);
|
|
1144
1151
|
});
|
|
1145
|
-
const t = new
|
|
1146
|
-
t.setServiceUUID(e.serviceUUID), (function(
|
|
1147
|
-
function
|
|
1148
|
-
|
|
1152
|
+
const t = new oe();
|
|
1153
|
+
t.setServiceUUID(e.serviceUUID), (function(i) {
|
|
1154
|
+
function s(I, h) {
|
|
1155
|
+
i.setOperationName("CollectLogs"), i.doSend([h, I]);
|
|
1149
1156
|
}
|
|
1150
|
-
const
|
|
1151
|
-
console.log = (...
|
|
1152
|
-
|
|
1153
|
-
}, console.error = (...
|
|
1154
|
-
|
|
1155
|
-
}, console.warn = (...
|
|
1156
|
-
|
|
1157
|
-
}, console.info = (...
|
|
1158
|
-
|
|
1159
|
-
}, l().logLevel === "DEBUG" && (console.debug = (...
|
|
1160
|
-
|
|
1157
|
+
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);
|
|
1158
|
+
console.log = (...I) => {
|
|
1159
|
+
s("INFO", I.join(" ")), g(...I);
|
|
1160
|
+
}, console.error = (...I) => {
|
|
1161
|
+
s("ERROR", I.join(" ")), r(...I);
|
|
1162
|
+
}, console.warn = (...I) => {
|
|
1163
|
+
s("WARN", I.join(" ")), a(...I);
|
|
1164
|
+
}, console.info = (...I) => {
|
|
1165
|
+
s("INFO", I.join(" ")), c(...I);
|
|
1166
|
+
}, l().logLevel === "DEBUG" && (console.debug = (...I) => {
|
|
1167
|
+
s("DEBUG", I.join(" ")), d(...I);
|
|
1161
1168
|
});
|
|
1162
|
-
})(t), (function(
|
|
1163
|
-
const
|
|
1164
|
-
new
|
|
1165
|
-
const
|
|
1166
|
-
|
|
1169
|
+
})(t), (function(i = []) {
|
|
1170
|
+
const s = new Le(i);
|
|
1171
|
+
new _e().doSend(s.getExcludedDomains());
|
|
1172
|
+
const g = new De(), r = new $e();
|
|
1173
|
+
s.patchFetch(g, r), s.patchHttp(g, r);
|
|
1167
1174
|
})(e.domainsToNotPropagateHeadersTo);
|
|
1168
|
-
const
|
|
1169
|
-
|
|
1175
|
+
const n = new Te();
|
|
1176
|
+
n.setServiceUUID(e.serviceUUID), Ye(n), Ee(), new ze().send();
|
|
1170
1177
|
}
|
|
1171
|
-
function
|
|
1172
|
-
const
|
|
1173
|
-
new
|
|
1178
|
+
function rt(o, e, t, n = !1) {
|
|
1179
|
+
const i = l();
|
|
1180
|
+
new be(i.apiKey).identify(o, e, t, n);
|
|
1174
1181
|
}
|
|
1175
|
-
function
|
|
1176
|
-
const
|
|
1177
|
-
new
|
|
1182
|
+
function at(o, e = {}, t, n = !1) {
|
|
1183
|
+
const i = l();
|
|
1184
|
+
new be(i.apiKey).addOrUpdateMetadata(o, e, t, n);
|
|
1178
1185
|
}
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
+
class Me extends w {
|
|
1187
|
+
constructor() {
|
|
1188
|
+
super(), this.operationName = "CollectFunctionSpans";
|
|
1189
|
+
}
|
|
1190
|
+
send(e) {
|
|
1191
|
+
const t = l().sfDebug;
|
|
1192
|
+
t && console.log(`[FunctionSpanTransmitter] Preparing to send ${e.length} function span(s)`);
|
|
1193
|
+
for (const n of e) try {
|
|
1194
|
+
let i;
|
|
1195
|
+
if (n.result !== void 0 && n.result !== null) {
|
|
1196
|
+
const g = typeof n.result;
|
|
1197
|
+
i = JSON.stringify({ type: g, has_value: !0, value: n.result });
|
|
1198
|
+
} else i = n.result === null ? JSON.stringify({ type: "null", has_value: !0, value: null }) : JSON.stringify({ type: "undefined", has_value: !1, value: null });
|
|
1199
|
+
const s = this.getVariables({ library: "JS/TS BACKEND", version: l().version, spanId: n.spanId, parentSpanId: n.parentSpanId, filePath: n.filePath, lineNumber: n.metadata.line, columnNumber: n.metadata.column, functionName: n.functionName, arguments: JSON.stringify(n.args || {}), returnValue: i, startTimeNs: (1e6 * Date.now() - 1e6 * n.duration).toString(), durationNs: (1e6 * n.duration).toString() });
|
|
1200
|
+
t && (console.log(`[FunctionSpanTransmitter] Sending GraphQL mutation to ${this.endpoint}`), console.log("[FunctionSpanTransmitter] Variables:", JSON.stringify(s, null, 2))), F(this.endpoint, this.operationName, this.getQuery(), s), t && console.log(`[FunctionSpanTransmitter] Queued function span for ${n.functionName}`);
|
|
1201
|
+
} catch (i) {
|
|
1202
|
+
console.error(`[FunctionSpanTransmitter] Error preparing function span for ${n.functionName}:`, i);
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
getQuery() {
|
|
1206
|
+
return `
|
|
1207
|
+
${this.queryType} ${this.operationName}(
|
|
1208
|
+
$apiKey: String!,
|
|
1209
|
+
$serviceUuid: String!,
|
|
1210
|
+
$sessionId: String!,
|
|
1211
|
+
$timestampMs: String!,
|
|
1212
|
+
$parentSpanId: String,
|
|
1213
|
+
$library: String!,
|
|
1214
|
+
$version: String!,
|
|
1215
|
+
$spanId: String!,
|
|
1216
|
+
$filePath: String!,
|
|
1217
|
+
$lineNumber: Int!,
|
|
1218
|
+
$columnNumber: Int!,
|
|
1219
|
+
$functionName: String!,
|
|
1220
|
+
$arguments: String!,
|
|
1221
|
+
$returnValue: String,
|
|
1222
|
+
$startTimeNs: String!,
|
|
1223
|
+
$durationNs: String!
|
|
1224
|
+
) {
|
|
1225
|
+
${this.queryName}(
|
|
1226
|
+
apiKey: $apiKey,
|
|
1227
|
+
serviceUuid: $serviceUuid,
|
|
1228
|
+
sessionId: $sessionId,
|
|
1229
|
+
timestampMs: $timestampMs,
|
|
1230
|
+
parentSpanId: $parentSpanId,
|
|
1231
|
+
library: $library,
|
|
1232
|
+
version: $version,
|
|
1233
|
+
spanId: $spanId,
|
|
1234
|
+
filePath: $filePath,
|
|
1235
|
+
lineNumber: $lineNumber,
|
|
1236
|
+
columnNumber: $columnNumber,
|
|
1237
|
+
functionName: $functionName,
|
|
1238
|
+
arguments: $arguments,
|
|
1239
|
+
returnValue: $returnValue,
|
|
1240
|
+
startTimeNs: $startTimeNs,
|
|
1241
|
+
durationNs: $durationNs
|
|
1242
|
+
)
|
|
1243
|
+
}
|
|
1244
|
+
`;
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
let ne = null;
|
|
1248
|
+
function ct(o, e, t, n) {
|
|
1249
|
+
const i = function(...s) {
|
|
1250
|
+
const g = z(), r = g?.sfDebug || !1;
|
|
1251
|
+
r && console.log(`[FuncSpan] captureFunctionSpan wrapper called for ${t}::${e}`);
|
|
1252
|
+
const a = (function(u, m) {
|
|
1253
|
+
const A = Ze();
|
|
1254
|
+
if (A) {
|
|
1255
|
+
const y = Se(A);
|
|
1256
|
+
if (y) return process.env.SF_DEBUG === "true" && console.log(`[FuncSpan] Using HTTP header override for ${u}::${m}`), y;
|
|
1186
1257
|
}
|
|
1187
|
-
return
|
|
1258
|
+
return Oe(u, m);
|
|
1188
1259
|
})(t, e);
|
|
1189
|
-
if (a.enable_sampling && a.sample_rate < 1 && Math.random() > a.sample_rate) return
|
|
1190
|
-
if (a.sample_rate === 0) return
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1260
|
+
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);
|
|
1261
|
+
if (a.sample_rate === 0) return r && console.log(`[FuncSpan] Skipping ${e} - sample_rate is 0.0`), o.apply(this, s);
|
|
1262
|
+
r && console.log(`[FuncSpan] Capturing function span for ${e}`);
|
|
1263
|
+
const c = G.getInstance(), d = c.getCurrentFunctionSpanId(), I = R();
|
|
1264
|
+
c.setCurrentFunctionSpanId(I);
|
|
1265
|
+
const h = Date.now();
|
|
1266
|
+
let p = null;
|
|
1267
|
+
a.capture_arguments && (p = {}, n.paramNames.forEach((u, m) => {
|
|
1268
|
+
m < s.length && (p[u] = s[m]);
|
|
1269
|
+
}), p && a.arg_limit_mb > 0 && (p = ee(p, a.arg_limit_mb)));
|
|
1198
1270
|
try {
|
|
1199
|
-
const
|
|
1200
|
-
if (
|
|
1271
|
+
const u = o.apply(this, s);
|
|
1272
|
+
if (u && typeof u.then == "function") return u.then((y) => {
|
|
1201
1273
|
const b = Date.now();
|
|
1202
|
-
let
|
|
1203
|
-
return a.capture_return_value && a.return_limit_mb > 0 && (
|
|
1204
|
-
}, (
|
|
1274
|
+
let f = null;
|
|
1275
|
+
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;
|
|
1276
|
+
}, (y) => {
|
|
1205
1277
|
const b = Date.now();
|
|
1206
|
-
throw D({ functionName: e, filePath: t, metadata:
|
|
1278
|
+
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;
|
|
1207
1279
|
});
|
|
1208
|
-
const
|
|
1209
|
-
let
|
|
1210
|
-
return a.capture_return_value && a.return_limit_mb > 0 && (
|
|
1211
|
-
} catch (
|
|
1212
|
-
const
|
|
1213
|
-
throw D({ functionName: e, filePath: t, error:
|
|
1280
|
+
const m = Date.now();
|
|
1281
|
+
let A = null;
|
|
1282
|
+
return a.capture_return_value && a.return_limit_mb > 0 && (A = ee(u, a.return_limit_mb)), D({ functionName: e, filePath: t, metadata: n, args: p, result: A, error: null, duration: m - h, async: !1, spanId: I, parentSpanId: d }), d ? c.setCurrentFunctionSpanId(d) : c.clearCurrentFunctionSpanId(), u;
|
|
1283
|
+
} catch (u) {
|
|
1284
|
+
const m = Date.now();
|
|
1285
|
+
throw D({ functionName: e, filePath: t, metadata: n, args: p, result: null, error: u?.message || String(u), duration: m - h, async: !1, spanId: I, parentSpanId: d }), d ? c.setCurrentFunctionSpanId(d) : c.clearCurrentFunctionSpanId(), u;
|
|
1214
1286
|
}
|
|
1215
1287
|
};
|
|
1216
|
-
Object.defineProperty(
|
|
1217
|
-
for (const
|
|
1218
|
-
return
|
|
1288
|
+
Object.defineProperty(i, "name", { value: e, writable: !1 });
|
|
1289
|
+
for (const s in o) o.hasOwnProperty(s) && (i[s] = o[s]);
|
|
1290
|
+
return i;
|
|
1219
1291
|
}
|
|
1220
|
-
function D(
|
|
1221
|
-
|
|
1222
|
-
});
|
|
1292
|
+
function D(o) {
|
|
1293
|
+
const e = z(), t = e?.sfDebug || !1;
|
|
1294
|
+
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 });
|
|
1295
|
+
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 };
|
|
1296
|
+
t && console.log("[FuncSpan] Sending function span to transmitter:", n);
|
|
1297
|
+
try {
|
|
1298
|
+
(ne || (ne = new Me()), ne).send([n]), t && console.log("[FuncSpan] Function span sent successfully");
|
|
1299
|
+
} catch (i) {
|
|
1300
|
+
console.error("[FuncSpan] Error sending function span:", i);
|
|
1301
|
+
}
|
|
1223
1302
|
}
|
|
1224
1303
|
export {
|
|
1225
1304
|
G as ContextManager,
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1305
|
+
at as addOrUpdateMetadata,
|
|
1306
|
+
ct as captureFunctionSpan,
|
|
1307
|
+
Xe as clearFuncspanOverride,
|
|
1308
|
+
M as getCurrentFunctionSpanId,
|
|
1309
|
+
ot as getDefaultConfig,
|
|
1310
|
+
ye as getEnvConfig,
|
|
1311
|
+
Ze as getFuncspanOverride,
|
|
1312
|
+
Oe as getGlobalConfig,
|
|
1313
|
+
rt as identify,
|
|
1314
|
+
ke as initializeConfigLoader,
|
|
1315
|
+
Pe as isConfigLoaderInitialized,
|
|
1316
|
+
Se as parseHeaderOverride,
|
|
1317
|
+
it as runWithContext,
|
|
1318
|
+
Je as setFuncspanOverride,
|
|
1319
|
+
st as setupInterceptors
|
|
1241
1320
|
};
|