@merittdev/horus-lens 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/browser.cjs +259 -209
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.js +3 -2
- package/dist/chunk-AS225HUA.js +15344 -0
- package/dist/chunk-AS225HUA.js.map +1 -0
- package/dist/{chunk-4E427AKG.js → chunk-RVIL2GL4.js} +5 -3
- package/dist/{chunk-4E427AKG.js.map → chunk-RVIL2GL4.js.map} +1 -1
- package/dist/chunk-XGZ7BZTS.js +15082 -0
- package/dist/chunk-XGZ7BZTS.js.map +1 -0
- package/dist/index.cjs +259 -209
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -4
- package/dist/index.d.ts +2 -4
- package/dist/index.js +4 -2
- package/dist/lens.min.js +31 -31
- package/dist/{chunk-25CZMYQK.js → react-native.cjs} +2741 -15984
- package/dist/react-native.cjs.map +1 -0
- package/dist/react-native.d.cts +492 -0
- package/dist/react-native.d.ts +492 -0
- package/dist/react-native.js +2105 -0
- package/dist/react-native.js.map +1 -0
- package/dist/react.cjs +259 -209
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +3 -2
- package/dist/react.js.map +1 -1
- package/package.json +25 -3
- package/dist/chunk-25CZMYQK.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -14822,6 +14822,260 @@ var ApiErrorSchema = external_exports.object({
|
|
|
14822
14822
|
message: external_exports.string()
|
|
14823
14823
|
});
|
|
14824
14824
|
|
|
14825
|
+
// ../core/dist/chunk-YBVE6CBL.js
|
|
14826
|
+
var SDK_NAME = "@merittdev/horus-lens";
|
|
14827
|
+
var SDK_VERSION = true ? "0.6.0" : "0.0.0-dev";
|
|
14828
|
+
var DEFAULT_ENDPOINT = "https://api.horus.sh";
|
|
14829
|
+
var DEFAULT_REPLAY_WINDOW_MS = 15e3;
|
|
14830
|
+
var DEFAULT_MAX_CONSOLE_ENTRIES = 200;
|
|
14831
|
+
var DEFAULT_MAX_NETWORK_ENTRIES = 100;
|
|
14832
|
+
var MAX_ERROR_ENTRIES = 100;
|
|
14833
|
+
var CONSOLE_TAIL_SIZE = 50;
|
|
14834
|
+
var NETWORK_TAIL_SIZE = 30;
|
|
14835
|
+
var MAX_SERIALIZED_ARG_CHARS = 2e3;
|
|
14836
|
+
var MAX_DOM_BYTES = 2 * 1024 * 1024;
|
|
14837
|
+
var MAX_TARGET_TEXT_CHARS = 200;
|
|
14838
|
+
var SCREENSHOT_TIMEOUT_MS = 2e4;
|
|
14839
|
+
var SCREENSHOT_RESOURCE_TIMEOUT_MS = 3500;
|
|
14840
|
+
var SCREENSHOT_MAX_SCALE = 2;
|
|
14841
|
+
var SCREENSHOT_MAX_PIXELS = 25e5;
|
|
14842
|
+
var AUTO_CAPTURE_COOLDOWN_MS = 10 * 60 * 1e3;
|
|
14843
|
+
var AUTO_CAPTURE_SESSION_CAP = 5;
|
|
14844
|
+
var MAX_MANUAL_RECORDING_MS = 12e4;
|
|
14845
|
+
var MAX_MANUAL_RECORDING_EVENTS = 1e4;
|
|
14846
|
+
var LENS_OVERLAY_HOST_ID = "__lens_root__";
|
|
14847
|
+
var RingBuffer = class {
|
|
14848
|
+
constructor(capacity) {
|
|
14849
|
+
this.capacity = capacity;
|
|
14850
|
+
if (capacity <= 0) throw new Error("RingBuffer capacity must be > 0");
|
|
14851
|
+
}
|
|
14852
|
+
capacity;
|
|
14853
|
+
items = [];
|
|
14854
|
+
push(item) {
|
|
14855
|
+
this.items.push(item);
|
|
14856
|
+
if (this.items.length > this.capacity) {
|
|
14857
|
+
this.items.splice(0, this.items.length - this.capacity);
|
|
14858
|
+
}
|
|
14859
|
+
}
|
|
14860
|
+
/** Snapshot of current contents, oldest first. */
|
|
14861
|
+
drain() {
|
|
14862
|
+
return [...this.items];
|
|
14863
|
+
}
|
|
14864
|
+
tail(count) {
|
|
14865
|
+
return this.items.slice(-count);
|
|
14866
|
+
}
|
|
14867
|
+
clear() {
|
|
14868
|
+
this.items = [];
|
|
14869
|
+
}
|
|
14870
|
+
get size() {
|
|
14871
|
+
return this.items.length;
|
|
14872
|
+
}
|
|
14873
|
+
};
|
|
14874
|
+
var HttpError = class extends Error {
|
|
14875
|
+
constructor(status, message) {
|
|
14876
|
+
super(message);
|
|
14877
|
+
this.status = status;
|
|
14878
|
+
this.name = "HttpError";
|
|
14879
|
+
}
|
|
14880
|
+
status;
|
|
14881
|
+
};
|
|
14882
|
+
var Transport = class {
|
|
14883
|
+
constructor(config2) {
|
|
14884
|
+
this.config = config2;
|
|
14885
|
+
}
|
|
14886
|
+
config;
|
|
14887
|
+
async initiate(assets) {
|
|
14888
|
+
const body = {
|
|
14889
|
+
accessId: this.config.accessId,
|
|
14890
|
+
assets
|
|
14891
|
+
};
|
|
14892
|
+
return this.postJson(
|
|
14893
|
+
`${this.config.endpoint}/v1/reports/initiate`,
|
|
14894
|
+
body,
|
|
14895
|
+
{ retries: 0 }
|
|
14896
|
+
);
|
|
14897
|
+
}
|
|
14898
|
+
/** Record a late-uploaded asset (background screenshot) on a finalized report. */
|
|
14899
|
+
async attachAsset(reportId, asset) {
|
|
14900
|
+
const body = {
|
|
14901
|
+
accessId: this.config.accessId,
|
|
14902
|
+
...asset
|
|
14903
|
+
};
|
|
14904
|
+
await this.postJson(
|
|
14905
|
+
`${this.config.endpoint}/v1/reports/${encodeURIComponent(reportId)}/assets`,
|
|
14906
|
+
body
|
|
14907
|
+
);
|
|
14908
|
+
}
|
|
14909
|
+
async uploadAsset(upload, blob2, signal) {
|
|
14910
|
+
const session = this.config.signal;
|
|
14911
|
+
const controller = session ? new AbortController() : void 0;
|
|
14912
|
+
const abort = () => controller?.abort();
|
|
14913
|
+
if (session?.aborted || signal?.aborted) abort();
|
|
14914
|
+
session?.addEventListener("abort", abort);
|
|
14915
|
+
if (controller) signal?.addEventListener("abort", abort);
|
|
14916
|
+
try {
|
|
14917
|
+
const response = await (this.config.fetch ?? fetch)(upload.url, {
|
|
14918
|
+
method: upload.method,
|
|
14919
|
+
headers: upload.headers,
|
|
14920
|
+
body: blob2,
|
|
14921
|
+
signal: controller?.signal ?? signal
|
|
14922
|
+
});
|
|
14923
|
+
if (!response.ok) {
|
|
14924
|
+
throw new Error(
|
|
14925
|
+
`Asset upload failed (${upload.kind}): ${response.status}`
|
|
14926
|
+
);
|
|
14927
|
+
}
|
|
14928
|
+
} finally {
|
|
14929
|
+
session?.removeEventListener("abort", abort);
|
|
14930
|
+
if (controller) signal?.removeEventListener("abort", abort);
|
|
14931
|
+
}
|
|
14932
|
+
}
|
|
14933
|
+
async finalize(reportId, metadata, uploadedAssets) {
|
|
14934
|
+
const body = {
|
|
14935
|
+
accessId: this.config.accessId,
|
|
14936
|
+
metadata,
|
|
14937
|
+
uploadedAssets
|
|
14938
|
+
};
|
|
14939
|
+
try {
|
|
14940
|
+
return await this.postJson(
|
|
14941
|
+
`${this.config.endpoint}/v1/reports/${reportId}/finalize`,
|
|
14942
|
+
body
|
|
14943
|
+
);
|
|
14944
|
+
} catch (err) {
|
|
14945
|
+
if (err instanceof HttpError && err.status === 409) {
|
|
14946
|
+
return { reportId, status: "submitted" };
|
|
14947
|
+
}
|
|
14948
|
+
throw err;
|
|
14949
|
+
}
|
|
14950
|
+
}
|
|
14951
|
+
async postJson(url2, body, opts = {}) {
|
|
14952
|
+
const retries = opts.retries ?? 1;
|
|
14953
|
+
let lastError;
|
|
14954
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
14955
|
+
const controller = this.config.requestTimeoutMs || this.config.signal ? new AbortController() : void 0;
|
|
14956
|
+
const abort = () => controller?.abort();
|
|
14957
|
+
const session = this.config.signal;
|
|
14958
|
+
if (session?.aborted) throw new Error("Capture session ended");
|
|
14959
|
+
session?.addEventListener("abort", abort);
|
|
14960
|
+
const timeout = controller && this.config.requestTimeoutMs ? setTimeout(() => controller.abort(), this.config.requestTimeoutMs) : void 0;
|
|
14961
|
+
try {
|
|
14962
|
+
const response = await (this.config.fetch ?? fetch)(url2, {
|
|
14963
|
+
method: "POST",
|
|
14964
|
+
headers: {
|
|
14965
|
+
"content-type": "application/json",
|
|
14966
|
+
...this.config.origin ? { Origin: this.config.origin } : {}
|
|
14967
|
+
},
|
|
14968
|
+
body: JSON.stringify(body),
|
|
14969
|
+
...controller ? { signal: controller.signal } : {}
|
|
14970
|
+
});
|
|
14971
|
+
if (!response.ok) {
|
|
14972
|
+
const text = await response.text().catch(() => "");
|
|
14973
|
+
throw new HttpError(
|
|
14974
|
+
response.status,
|
|
14975
|
+
`Request to ${url2} failed: ${response.status} ${text}`.trim()
|
|
14976
|
+
);
|
|
14977
|
+
}
|
|
14978
|
+
return await response.json();
|
|
14979
|
+
} catch (err) {
|
|
14980
|
+
lastError = err;
|
|
14981
|
+
if (this.config.debug) {
|
|
14982
|
+
console.warn(
|
|
14983
|
+
`[lens] request failed (attempt ${attempt + 1}/${retries + 1})`,
|
|
14984
|
+
err
|
|
14985
|
+
);
|
|
14986
|
+
}
|
|
14987
|
+
} finally {
|
|
14988
|
+
if (timeout !== void 0) clearTimeout(timeout);
|
|
14989
|
+
session?.removeEventListener("abort", abort);
|
|
14990
|
+
}
|
|
14991
|
+
}
|
|
14992
|
+
throw lastError;
|
|
14993
|
+
}
|
|
14994
|
+
};
|
|
14995
|
+
var LEVELS = ["log", "info", "warn", "error", "debug"];
|
|
14996
|
+
function cap(value) {
|
|
14997
|
+
return value.length > MAX_SERIALIZED_ARG_CHARS ? `${value.slice(0, MAX_SERIALIZED_ARG_CHARS)}\u2026[truncated]` : value;
|
|
14998
|
+
}
|
|
14999
|
+
function serializeArg(value) {
|
|
15000
|
+
if (value === null) return "null";
|
|
15001
|
+
if (value === void 0) return "undefined";
|
|
15002
|
+
const type = typeof value;
|
|
15003
|
+
if (type === "string") return cap(value);
|
|
15004
|
+
if (type === "number" || type === "boolean" || type === "bigint" || type === "symbol") {
|
|
15005
|
+
return String(value);
|
|
15006
|
+
}
|
|
15007
|
+
if (type === "function") {
|
|
15008
|
+
return `[Function: ${value.name || "anonymous"}]`;
|
|
15009
|
+
}
|
|
15010
|
+
if (value instanceof Error) {
|
|
15011
|
+
return cap(value.stack ? `${value.name}: ${value.message}
|
|
15012
|
+
${value.stack}` : `${value.name}: ${value.message}`);
|
|
15013
|
+
}
|
|
15014
|
+
try {
|
|
15015
|
+
const seen = /* @__PURE__ */ new WeakSet();
|
|
15016
|
+
const json2 = JSON.stringify(value, (_key, val) => {
|
|
15017
|
+
if (typeof val === "bigint") return String(val);
|
|
15018
|
+
if (typeof val === "function") return "[Function]";
|
|
15019
|
+
if (typeof val === "object" && val !== null) {
|
|
15020
|
+
if (seen.has(val)) return "[Circular]";
|
|
15021
|
+
seen.add(val);
|
|
15022
|
+
}
|
|
15023
|
+
return val;
|
|
15024
|
+
});
|
|
15025
|
+
return cap(json2 ?? String(value));
|
|
15026
|
+
} catch {
|
|
15027
|
+
return cap(String(value));
|
|
15028
|
+
}
|
|
15029
|
+
}
|
|
15030
|
+
function firstErrorStack(args) {
|
|
15031
|
+
for (const arg of args) {
|
|
15032
|
+
if (arg instanceof Error && arg.stack) return arg.stack;
|
|
15033
|
+
}
|
|
15034
|
+
return void 0;
|
|
15035
|
+
}
|
|
15036
|
+
function installConsole(consoleBuffer, errorBuffer) {
|
|
15037
|
+
if (typeof console === "undefined") return () => {
|
|
15038
|
+
};
|
|
15039
|
+
const target = console;
|
|
15040
|
+
const restores = [];
|
|
15041
|
+
let active = true;
|
|
15042
|
+
for (const level of LEVELS) {
|
|
15043
|
+
const original = target[level];
|
|
15044
|
+
if (typeof original !== "function") continue;
|
|
15045
|
+
const wrapped = (...args) => {
|
|
15046
|
+
if (!active) {
|
|
15047
|
+
original.apply(console, args);
|
|
15048
|
+
return;
|
|
15049
|
+
}
|
|
15050
|
+
try {
|
|
15051
|
+
const serialized = args.map(serializeArg);
|
|
15052
|
+
const timestamp = Date.now();
|
|
15053
|
+
consoleBuffer.push({ level, args: serialized, timestamp });
|
|
15054
|
+
if (level === "error") {
|
|
15055
|
+
const stack = firstErrorStack(args);
|
|
15056
|
+
const entry = {
|
|
15057
|
+
message: serialized.join(" ") || "console.error",
|
|
15058
|
+
source: "console.error",
|
|
15059
|
+
timestamp
|
|
15060
|
+
};
|
|
15061
|
+
if (stack) entry.stack = stack;
|
|
15062
|
+
errorBuffer.push(entry);
|
|
15063
|
+
}
|
|
15064
|
+
} catch {
|
|
15065
|
+
}
|
|
15066
|
+
original.apply(console, args);
|
|
15067
|
+
};
|
|
15068
|
+
target[level] = wrapped;
|
|
15069
|
+
restores.push(() => {
|
|
15070
|
+
if (target[level] === wrapped) target[level] = original;
|
|
15071
|
+
});
|
|
15072
|
+
}
|
|
15073
|
+
return () => {
|
|
15074
|
+
active = false;
|
|
15075
|
+
for (const restore of restores) restore();
|
|
15076
|
+
};
|
|
15077
|
+
}
|
|
15078
|
+
|
|
14825
15079
|
// ../../node_modules/.pnpm/rrweb@2.1.0/node_modules/rrweb/dist/rrweb.js
|
|
14826
15080
|
var __defProp2 = Object.defineProperty;
|
|
14827
15081
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -26471,9 +26725,9 @@ var saveWebGLVar = (value, win, ctx) => {
|
|
|
26471
26725
|
}
|
|
26472
26726
|
return index2;
|
|
26473
26727
|
};
|
|
26474
|
-
function
|
|
26728
|
+
function serializeArg2(value, win, ctx) {
|
|
26475
26729
|
if (value instanceof Array) {
|
|
26476
|
-
return value.map((arg) =>
|
|
26730
|
+
return value.map((arg) => serializeArg2(arg, win, ctx));
|
|
26477
26731
|
} else if (value === null) {
|
|
26478
26732
|
return value;
|
|
26479
26733
|
} else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {
|
|
@@ -26499,7 +26753,7 @@ function serializeArg(value, win, ctx) {
|
|
|
26499
26753
|
return {
|
|
26500
26754
|
rr_type: name,
|
|
26501
26755
|
args: [
|
|
26502
|
-
|
|
26756
|
+
serializeArg2(value.buffer, win, ctx),
|
|
26503
26757
|
value.byteOffset,
|
|
26504
26758
|
value.byteLength
|
|
26505
26759
|
]
|
|
@@ -26522,7 +26776,7 @@ function serializeArg(value, win, ctx) {
|
|
|
26522
26776
|
const name = value.constructor.name;
|
|
26523
26777
|
return {
|
|
26524
26778
|
rr_type: name,
|
|
26525
|
-
args: [
|
|
26779
|
+
args: [serializeArg2(value.data, win, ctx), value.width, value.height]
|
|
26526
26780
|
};
|
|
26527
26781
|
} else if (isInstanceOfWebGLObject(value, win) || typeof value === "object") {
|
|
26528
26782
|
const name = value.constructor.name;
|
|
@@ -26535,7 +26789,7 @@ function serializeArg(value, win, ctx) {
|
|
|
26535
26789
|
return value;
|
|
26536
26790
|
}
|
|
26537
26791
|
var serializeArgs = (args, win, ctx) => {
|
|
26538
|
-
return args.map((arg) =>
|
|
26792
|
+
return args.map((arg) => serializeArg2(arg, win, ctx));
|
|
26539
26793
|
};
|
|
26540
26794
|
var isInstanceOfWebGLObject = (value, win) => {
|
|
26541
26795
|
const webGLConstructorNames = [
|
|
@@ -29110,27 +29364,6 @@ async function domToBlob(node2, options) {
|
|
|
29110
29364
|
}
|
|
29111
29365
|
|
|
29112
29366
|
// ../core/dist/index.js
|
|
29113
|
-
var SDK_NAME = "@merittdev/horus-lens";
|
|
29114
|
-
var SDK_VERSION = true ? "0.5.2" : "0.0.0-dev";
|
|
29115
|
-
var DEFAULT_ENDPOINT = "https://api.horus.sh";
|
|
29116
|
-
var DEFAULT_REPLAY_WINDOW_MS = 15e3;
|
|
29117
|
-
var DEFAULT_MAX_CONSOLE_ENTRIES = 200;
|
|
29118
|
-
var DEFAULT_MAX_NETWORK_ENTRIES = 100;
|
|
29119
|
-
var MAX_ERROR_ENTRIES = 100;
|
|
29120
|
-
var CONSOLE_TAIL_SIZE = 50;
|
|
29121
|
-
var NETWORK_TAIL_SIZE = 30;
|
|
29122
|
-
var MAX_SERIALIZED_ARG_CHARS = 2e3;
|
|
29123
|
-
var MAX_DOM_BYTES = 2 * 1024 * 1024;
|
|
29124
|
-
var MAX_TARGET_TEXT_CHARS = 200;
|
|
29125
|
-
var SCREENSHOT_TIMEOUT_MS = 2e4;
|
|
29126
|
-
var SCREENSHOT_RESOURCE_TIMEOUT_MS = 3500;
|
|
29127
|
-
var SCREENSHOT_MAX_SCALE = 2;
|
|
29128
|
-
var SCREENSHOT_MAX_PIXELS = 25e5;
|
|
29129
|
-
var AUTO_CAPTURE_COOLDOWN_MS = 10 * 60 * 1e3;
|
|
29130
|
-
var AUTO_CAPTURE_SESSION_CAP = 5;
|
|
29131
|
-
var MAX_MANUAL_RECORDING_MS = 12e4;
|
|
29132
|
-
var MAX_MANUAL_RECORDING_EVENTS = 1e4;
|
|
29133
|
-
var LENS_OVERLAY_HOST_ID = "__lens_root__";
|
|
29134
29367
|
function autoCaptureSignature(message) {
|
|
29135
29368
|
return message.toLowerCase().replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g, "<uuid>").replace(/\d+/g, "<n>").replace(/\s+/g, " ").trim();
|
|
29136
29369
|
}
|
|
@@ -29209,189 +29442,6 @@ function startAutoCapture(client, options = {}) {
|
|
|
29209
29442
|
window.removeEventListener("unhandledrejection", onRejection);
|
|
29210
29443
|
};
|
|
29211
29444
|
}
|
|
29212
|
-
var RingBuffer = class {
|
|
29213
|
-
constructor(capacity) {
|
|
29214
|
-
this.capacity = capacity;
|
|
29215
|
-
if (capacity <= 0) throw new Error("RingBuffer capacity must be > 0");
|
|
29216
|
-
}
|
|
29217
|
-
capacity;
|
|
29218
|
-
items = [];
|
|
29219
|
-
push(item) {
|
|
29220
|
-
this.items.push(item);
|
|
29221
|
-
if (this.items.length > this.capacity) {
|
|
29222
|
-
this.items.splice(0, this.items.length - this.capacity);
|
|
29223
|
-
}
|
|
29224
|
-
}
|
|
29225
|
-
/** Snapshot of current contents, oldest first. */
|
|
29226
|
-
drain() {
|
|
29227
|
-
return [...this.items];
|
|
29228
|
-
}
|
|
29229
|
-
tail(count) {
|
|
29230
|
-
return this.items.slice(-count);
|
|
29231
|
-
}
|
|
29232
|
-
clear() {
|
|
29233
|
-
this.items = [];
|
|
29234
|
-
}
|
|
29235
|
-
get size() {
|
|
29236
|
-
return this.items.length;
|
|
29237
|
-
}
|
|
29238
|
-
};
|
|
29239
|
-
var HttpError = class extends Error {
|
|
29240
|
-
constructor(status, message) {
|
|
29241
|
-
super(message);
|
|
29242
|
-
this.status = status;
|
|
29243
|
-
this.name = "HttpError";
|
|
29244
|
-
}
|
|
29245
|
-
status;
|
|
29246
|
-
};
|
|
29247
|
-
var Transport = class {
|
|
29248
|
-
constructor(config2) {
|
|
29249
|
-
this.config = config2;
|
|
29250
|
-
}
|
|
29251
|
-
config;
|
|
29252
|
-
async initiate(assets) {
|
|
29253
|
-
const body = { accessId: this.config.accessId, assets };
|
|
29254
|
-
return this.postJson(
|
|
29255
|
-
`${this.config.endpoint}/v1/reports/initiate`,
|
|
29256
|
-
body,
|
|
29257
|
-
{ retries: 0 }
|
|
29258
|
-
);
|
|
29259
|
-
}
|
|
29260
|
-
/** Record a late-uploaded asset (background screenshot) on a finalized report. */
|
|
29261
|
-
async attachAsset(reportId, asset) {
|
|
29262
|
-
const body = { accessId: this.config.accessId, ...asset };
|
|
29263
|
-
await this.postJson(`${this.config.endpoint}/v1/reports/${encodeURIComponent(reportId)}/assets`, body);
|
|
29264
|
-
}
|
|
29265
|
-
async uploadAsset(upload, blob2, signal) {
|
|
29266
|
-
const response = await fetch(upload.url, {
|
|
29267
|
-
method: upload.method,
|
|
29268
|
-
headers: upload.headers,
|
|
29269
|
-
body: blob2,
|
|
29270
|
-
signal
|
|
29271
|
-
});
|
|
29272
|
-
if (!response.ok) {
|
|
29273
|
-
throw new Error(`Asset upload failed (${upload.kind}): ${response.status}`);
|
|
29274
|
-
}
|
|
29275
|
-
}
|
|
29276
|
-
async finalize(reportId, metadata, uploadedAssets) {
|
|
29277
|
-
const body = { accessId: this.config.accessId, metadata, uploadedAssets };
|
|
29278
|
-
try {
|
|
29279
|
-
return await this.postJson(
|
|
29280
|
-
`${this.config.endpoint}/v1/reports/${reportId}/finalize`,
|
|
29281
|
-
body
|
|
29282
|
-
);
|
|
29283
|
-
} catch (err) {
|
|
29284
|
-
if (err instanceof HttpError && err.status === 409) {
|
|
29285
|
-
return { reportId, status: "submitted" };
|
|
29286
|
-
}
|
|
29287
|
-
throw err;
|
|
29288
|
-
}
|
|
29289
|
-
}
|
|
29290
|
-
async postJson(url2, body, opts = {}) {
|
|
29291
|
-
const retries = opts.retries ?? 1;
|
|
29292
|
-
let lastError;
|
|
29293
|
-
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
29294
|
-
try {
|
|
29295
|
-
const response = await fetch(url2, {
|
|
29296
|
-
method: "POST",
|
|
29297
|
-
headers: { "content-type": "application/json" },
|
|
29298
|
-
body: JSON.stringify(body)
|
|
29299
|
-
});
|
|
29300
|
-
if (!response.ok) {
|
|
29301
|
-
const text = await response.text().catch(() => "");
|
|
29302
|
-
throw new HttpError(
|
|
29303
|
-
response.status,
|
|
29304
|
-
`Request to ${url2} failed: ${response.status} ${text}`.trim()
|
|
29305
|
-
);
|
|
29306
|
-
}
|
|
29307
|
-
return await response.json();
|
|
29308
|
-
} catch (err) {
|
|
29309
|
-
lastError = err;
|
|
29310
|
-
if (this.config.debug) {
|
|
29311
|
-
console.warn(`[lens] request failed (attempt ${attempt + 1}/${retries + 1})`, err);
|
|
29312
|
-
}
|
|
29313
|
-
}
|
|
29314
|
-
}
|
|
29315
|
-
throw lastError;
|
|
29316
|
-
}
|
|
29317
|
-
};
|
|
29318
|
-
var LEVELS = ["log", "info", "warn", "error", "debug"];
|
|
29319
|
-
function cap(value) {
|
|
29320
|
-
return value.length > MAX_SERIALIZED_ARG_CHARS ? `${value.slice(0, MAX_SERIALIZED_ARG_CHARS)}\u2026[truncated]` : value;
|
|
29321
|
-
}
|
|
29322
|
-
function serializeArg2(value) {
|
|
29323
|
-
if (value === null) return "null";
|
|
29324
|
-
if (value === void 0) return "undefined";
|
|
29325
|
-
const type = typeof value;
|
|
29326
|
-
if (type === "string") return cap(value);
|
|
29327
|
-
if (type === "number" || type === "boolean" || type === "bigint" || type === "symbol") {
|
|
29328
|
-
return String(value);
|
|
29329
|
-
}
|
|
29330
|
-
if (type === "function") {
|
|
29331
|
-
return `[Function: ${value.name || "anonymous"}]`;
|
|
29332
|
-
}
|
|
29333
|
-
if (value instanceof Error) {
|
|
29334
|
-
return cap(value.stack ? `${value.name}: ${value.message}
|
|
29335
|
-
${value.stack}` : `${value.name}: ${value.message}`);
|
|
29336
|
-
}
|
|
29337
|
-
try {
|
|
29338
|
-
const seen = /* @__PURE__ */ new WeakSet();
|
|
29339
|
-
const json2 = JSON.stringify(value, (_key, val) => {
|
|
29340
|
-
if (typeof val === "bigint") return String(val);
|
|
29341
|
-
if (typeof val === "function") return "[Function]";
|
|
29342
|
-
if (typeof val === "object" && val !== null) {
|
|
29343
|
-
if (seen.has(val)) return "[Circular]";
|
|
29344
|
-
seen.add(val);
|
|
29345
|
-
}
|
|
29346
|
-
return val;
|
|
29347
|
-
});
|
|
29348
|
-
return cap(json2 ?? String(value));
|
|
29349
|
-
} catch {
|
|
29350
|
-
return cap(String(value));
|
|
29351
|
-
}
|
|
29352
|
-
}
|
|
29353
|
-
function firstErrorStack(args) {
|
|
29354
|
-
for (const arg of args) {
|
|
29355
|
-
if (arg instanceof Error && arg.stack) return arg.stack;
|
|
29356
|
-
}
|
|
29357
|
-
return void 0;
|
|
29358
|
-
}
|
|
29359
|
-
function installConsole(consoleBuffer, errorBuffer) {
|
|
29360
|
-
if (typeof console === "undefined") return () => {
|
|
29361
|
-
};
|
|
29362
|
-
const target = console;
|
|
29363
|
-
const restores = [];
|
|
29364
|
-
for (const level of LEVELS) {
|
|
29365
|
-
const original = target[level];
|
|
29366
|
-
if (typeof original !== "function") continue;
|
|
29367
|
-
const wrapped = (...args) => {
|
|
29368
|
-
try {
|
|
29369
|
-
const serialized = args.map(serializeArg2);
|
|
29370
|
-
const timestamp = Date.now();
|
|
29371
|
-
consoleBuffer.push({ level, args: serialized, timestamp });
|
|
29372
|
-
if (level === "error") {
|
|
29373
|
-
const stack = firstErrorStack(args);
|
|
29374
|
-
const entry = {
|
|
29375
|
-
message: serialized.join(" ") || "console.error",
|
|
29376
|
-
source: "console.error",
|
|
29377
|
-
timestamp
|
|
29378
|
-
};
|
|
29379
|
-
if (stack) entry.stack = stack;
|
|
29380
|
-
errorBuffer.push(entry);
|
|
29381
|
-
}
|
|
29382
|
-
} catch {
|
|
29383
|
-
}
|
|
29384
|
-
original.apply(console, args);
|
|
29385
|
-
};
|
|
29386
|
-
target[level] = wrapped;
|
|
29387
|
-
restores.push(() => {
|
|
29388
|
-
target[level] = original;
|
|
29389
|
-
});
|
|
29390
|
-
}
|
|
29391
|
-
return () => {
|
|
29392
|
-
for (const restore of restores) restore();
|
|
29393
|
-
};
|
|
29394
|
-
}
|
|
29395
29445
|
function nowMs() {
|
|
29396
29446
|
return typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
|
|
29397
29447
|
}
|